home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / usenet / volume2 / dungeon / part03 < prev    next >
Encoding:
Internet Message Format  |  1987-09-01  |  55.1 KB

  1. Path: uunet!husc6!cmcl2!rutgers!labrea!decwrl!decvax!tektronix!tekgen!tekred!games-request
  2. From: games-request@tekred.TEK.COM
  3. Newsgroups: comp.sources.games
  4. Subject: v02i036:  dungeon - game of adventure, Part03/14
  5. Message-ID: <1559@tekred.TEK.COM>
  6. Date: 1 Sep 87 19:27:42 GMT
  7. Sender: billr@tekred.TEK.COM
  8. Lines: 2617
  9. Approved: billr@tekred.TEK.COM
  10.  
  11. Submitted by: Bill Randle <games-request@tekred.TEK.COM>
  12. Comp.sources.games: Volume 2, Issue 36
  13. Archive-name: dungeon/Part03
  14.  
  15. #! /bin/sh
  16. # This is a shell archive.  Remove anything before this line, then unpack
  17. # it by saving it into a file and typing "sh file".  To overwrite existing
  18. # files, type "sh file -c".  You can also feed this as standard input via
  19. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  20. # will see the following message at the end:
  21. #        "End of archive 3 (of 7)."
  22. # Contents:  objcts.F rooms.F sobjs.F verbs.h villns.F
  23. # Wrapped by billr@tekred on Tue Apr 21 10:24:26 1987
  24. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  25. if test -f objcts.F -a "${1}" != "-c" ; then 
  26.   echo shar: Will not over-write existing file \"objcts.F\"
  27. else
  28. echo shar: Extracting \"objcts.F\" \(15854 characters\)
  29. sed "s/^X//" >objcts.F <<'END_OF_objcts.F'
  30. XC OAPPLI- OBJECT SPECIAL ACTION ROUTINES
  31. XC
  32. XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  33. XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  34. XC WRITTEN BY R. M. SUPNIK
  35. XC
  36. XC DECLARATIONS
  37. XC
  38. X    LOGICAL FUNCTION OAPPLI(RI,ARG)
  39. X    IMPLICIT INTEGER (A-Z)
  40. X    LOGICAL SOBJS,NOBJS
  41. X    LOGICAL QOPEN,QON,LIT
  42. X    LOGICAL MOVETO,RMDESC,CLOCKD
  43. X    LOGICAL THIEFP,CYCLOP,TROLLP,BALLOP,LIGHTP
  44. X    LOGICAL QEMPTY,QHERE,F,OPNCLS
  45. X#include "parser.h"
  46. X#include "gamestate.h"
  47. X#include "state.h"
  48. XC
  49. X    COMMON /BATS/ BATDRP(9)
  50. XC
  51. XC PUZZLE ROOM
  52. XC
  53. X    COMMON /PUZZLE/ CPDR(16),CPWL(8),CPVEC(64)
  54. X#include "rooms.h"
  55. X#include "rflag.h"
  56. X#include "rindex.h"
  57. X#include "objects.h"
  58. X#include "oflags.h"
  59. X#include "oindex.h"
  60. X#include "clock.h"
  61. X
  62. X#include "advers.h"
  63. X#include "verbs.h"
  64. X#include "flags.h"
  65. XC
  66. XC FUNCTIONS AND DATA
  67. XC
  68. X    QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
  69. X    QON(R)=and(OFLAG1(R),ONBT).NE.0
  70. X    DATA MXSMP/99/
  71. XC OAPPLI, PAGE 2
  72. XC
  73. X    IF(RI.EQ.0) GO TO 10
  74. XC                        !ZERO IS FALSE APP.
  75. X    IF(RI.LE.MXSMP) GO TO 100
  76. XC                        !SIMPLE OBJECT?
  77. X    IF(PRSO.GT.220) GO TO 5
  78. X    IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
  79. X5    IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
  80. X    AV=AVEHIC(WINNER)
  81. X    FLOBTS=FLAMBT+LITEBT+ONBT
  82. X    OAPPLI=.TRUE.
  83. XC
  84. X    GO TO (2000,5000,10000,11000,12000,15000,18000,
  85. X&     19000,20000,22000,25000,26000,32000,35000,39000,40000,
  86. X&     45000,47000,48000,49000,50000,51000,52000,54000,55000,
  87. X&     56000,57000,58000,59000,60000,61000,62000),
  88. X&        (RI-MXSMP)
  89. X    CALL BUG(6,RI)
  90. XC
  91. XC RETURN HERE TO DECLARE FALSE RESULT
  92. XC
  93. X10    OAPPLI=.FALSE.
  94. X    RETURN
  95. XC
  96. XC SIMPLE OBJECTS, PROCESSED EXTERNALLY.
  97. XC
  98. X100    IF(RI.LT.32) OAPPLI=SOBJS(RI,ARG)
  99. X    IF(RI.GE.32) OAPPLI=NOBJS(RI,ARG)
  100. X    RETURN
  101. XC OAPPLI, PAGE 3
  102. XC
  103. XC O100--    MACHINE FUNCTION
  104. XC
  105. X2000    IF(HERE.NE.MMACH) GO TO 10
  106. XC                        !NOT HERE? F
  107. X    OAPPLI=OPNCLS(MACHI,123,124)
  108. XC                        !HANDLE OPN/CLS.
  109. X    RETURN
  110. XC
  111. XC O101--    WATER FUNCTION
  112. XC
  113. X5000    IF(PRSA.NE.FILLW) GO TO 5050
  114. XC                        !FILL X WITH Y IS
  115. X    PRSA=PUTW
  116. XC                        !MADE INTO
  117. X    I=PRSI
  118. X    PRSI=PRSO
  119. X    PRSO=I
  120. XC                        !PUT Y IN X.
  121. X    I=ODI2
  122. X    ODI2=ODO2
  123. X    ODO2=I
  124. X5050    IF((PRSO.EQ.WATER).OR.(PRSO.EQ.GWATE)) GO TO 5100
  125. X    CALL RSPEAK(561)
  126. XC                        !WATER IS IND OBJ,
  127. X    RETURN
  128. XC                        !PUNT.
  129. XC
  130. X5100    IF(PRSA.NE.TAKEW) GO TO 5400
  131. XC                        !TAKE WATER?
  132. X    IF((OADV(BOTTL).EQ.WINNER).AND.(OCAN(PRSO).NE.BOTTL))
  133. X&        GO TO 5500
  134. X    IF(OCAN(PRSO).EQ.0) GO TO 5200
  135. XC                        !INSIDE ANYTHING?
  136. X    IF(QOPEN(OCAN(PRSO))) GO TO 5200
  137. XC                        !YES, OPEN?
  138. X    CALL RSPEAK(525,ODESC2(OCAN(PRSO)))
  139. XC                        !INSIDE, CLOSED, PUNT.
  140. X    RETURN
  141. XC
  142. X5200    CALL RSPEAK(615)
  143. XC                        !NOT INSIDE OR OPEN,
  144. X    RETURN
  145. XC                        !SLIPS THRU FINGERS.
  146. XC
  147. X5400    IF(PRSA.NE.PUTW) GO TO 5700
  148. XC                        !PUT WATER IN X?
  149. X    IF((AV.NE.0).AND.(PRSI.EQ.AV)) GO TO 5800
  150. XC                        !IN VEH?
  151. X    IF(PRSI.EQ.BOTTL) GO TO 5500
  152. XC                        !IN BOTTLE?
  153. X    CALL RSPSUB(297,ODI2)
  154. XC                        !WONT GO ELSEWHERE.
  155. X    CALL NEWSTA(PRSO,0,0,0,0)
  156. XC                        !VANISH WATER.
  157. X    RETURN
  158. XC
  159. X5500    IF(QOPEN(BOTTL)) GO TO 5550
  160. XC                        !BOTTLE OPEN?
  161. X    CALL RSPEAK(612)
  162. XC                        !NO, LOSE.
  163. X    RETURN
  164. XC
  165. X5550    IF(QEMPTY(BOTTL)) GO TO 5600
  166. XC                        !OPEN, EMPTY?
  167. X    CALL RSPEAK(613)
  168. XC                        !NO, ALREADY FULL.
  169. X    RETURN
  170. XC
  171. X5600    CALL NEWSTA(WATER,614,0,BOTTL,0)
  172. XC                        !TAKE WATER TO BOTTLE.
  173. X    RETURN
  174. XC
  175. X5700    IF((PRSA.NE.DROPW).AND.(PRSA.NE.POURW).AND.
  176. X&        (PRSA.NE.GIVEW)) GO TO 5900
  177. X    IF(AV.NE.0) GO TO 5800
  178. XC                        !INTO VEHICLE?
  179. X    CALL NEWSTA(PRSO,133,0,0,0)
  180. XC                        !NO, VANISHES.
  181. X    RETURN
  182. XC
  183. X5800    CALL NEWSTA(WATER,0,0,AV,0)
  184. XC                        !WATER INTO VEHICLE.
  185. X    CALL RSPSUB(296,ODESC2(AV))
  186. XC                        !DESCRIBE.
  187. X    RETURN
  188. XC
  189. X5900    IF(PRSA.NE.THROWW) GO TO 10
  190. XC                        !LAST CHANCE, THROW?
  191. X    CALL NEWSTA(PRSO,132,0,0,0)
  192. XC                        !VANISHES.
  193. X    RETURN
  194. XC OAPPLI, PAGE 4
  195. XC
  196. XC O102--    LEAF PILE
  197. XC
  198. X10000    IF(PRSA.NE.BURNW) GO TO 10500
  199. XC                        !BURN?
  200. X    IF(OROOM(PRSO).EQ.0) GO TO 10100
  201. XC                        !WAS HE CARRYING?
  202. X    CALL NEWSTA(PRSO,158,0,0,0)
  203. XC                        !NO, BURN IT.
  204. X    RETURN
  205. XC
  206. X10100    CALL NEWSTA(PRSO,0,HERE,0,0)
  207. XC                        !DROP LEAVES.
  208. X    CALL JIGSUP(159)
  209. XC                        !BURN HIM.
  210. X    RETURN
  211. XC
  212. X10500    IF(PRSA.NE.MOVEW) GO TO 10600
  213. XC                        !MOVE?
  214. X    CALL RSPEAK(2)
  215. XC                        !DONE.
  216. X    RETURN
  217. XC
  218. X10600    IF((PRSA.NE.LOOKUW).OR.(RVCLR.NE.0)) GO TO 10
  219. X    CALL RSPEAK(344)
  220. XC                        !LOOK UNDER?
  221. X    RETURN
  222. XC
  223. XC O103--    TROLL, DONE EXTERNALLY.
  224. XC
  225. X11000    OAPPLI=TROLLP(ARG)
  226. XC                        !TROLL PROCESSOR.
  227. X    RETURN
  228. XC
  229. XC O104--    RUSTY KNIFE.
  230. XC
  231. X12000    IF(PRSA.NE.TAKEW) GO TO 12100
  232. XC                        !TAKE?
  233. X    IF(OADV(SWORD).EQ.WINNER) CALL RSPEAK(160)
  234. XC                        !PULSE SWORD.
  235. X    GO TO 10
  236. XC
  237. X12100    IF((((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW)).OR.
  238. X&        (PRSI.NE.RKNIF)).AND.
  239. X&      (((PRSA.NE.SWINGW).AND.(PRSA.NE.THROWW)).OR.
  240. X&        (PRSO.NE.RKNIF))) GO TO 10
  241. X    CALL NEWSTA(RKNIF,0,0,0,0)
  242. XC                        !KILL KNIFE.
  243. X    CALL JIGSUP(161)
  244. XC                        !KILL HIM.
  245. X    RETURN
  246. XC OAPPLI, PAGE 5
  247. XC
  248. XC O105--    GLACIER
  249. XC
  250. X15000    IF(PRSA.NE.THROWW) GO TO 15500
  251. XC                        !THROW?
  252. X    IF(PRSO.NE.TORCH) GO TO 15400
  253. XC                        !TORCH?
  254. X    CALL NEWSTA(ICE,169,0,0,0)
  255. XC                        !MELT ICE.
  256. X    ODESC1(TORCH)=174
  257. XC                        !MUNG TORCH.
  258. X    ODESC2(TORCH)=173
  259. X    OFLAG1(TORCH)=and(OFLAG1(TORCH), not(FLOBTS))
  260. X    CALL NEWSTA(TORCH,0,STREA,0,0)
  261. XC                        !MOVE TORCH.
  262. X    GLACRF=.TRUE.
  263. XC                        !GLACIER GONE.
  264. X    IF(.NOT.LIT(HERE)) CALL RSPEAK(170)
  265. XC                        !IN DARK?
  266. X    RETURN
  267. XC
  268. X15400    CALL RSPEAK(171)
  269. XC                        !JOKE IF NOT TORCH.
  270. X    RETURN
  271. XC
  272. X15500    IF((PRSA.NE.MELTW).OR.(PRSO.NE.ICE)) GO TO 10
  273. X    IF(and(OFLAG1(PRSI),FLOBTS).EQ.FLOBTS) GO TO 15600
  274. X    CALL RSPSUB(298,ODI2)
  275. XC                        !CANT MELT WITH THAT.
  276. X    RETURN
  277. XC
  278. X15600    GLACMF=.TRUE.
  279. XC                        !PARTIAL MELT.
  280. X    IF(PRSI.NE.TORCH) GO TO 15700
  281. XC                        !MELT WITH TORCH?
  282. X    ODESC1(TORCH)=174
  283. XC                        !MUNG TORCH.
  284. X    ODESC2(TORCH)=173
  285. X    OFLAG1(TORCH)=and(OFLAG1(TORCH), not(FLOBTS))
  286. X15700    CALL JIGSUP(172)
  287. XC                        !DROWN.
  288. X    RETURN
  289. XC
  290. XC O106--    BLACK BOOK
  291. XC
  292. X18000    IF(PRSA.NE.OPENW) GO TO 18100
  293. XC                        !OPEN?
  294. X    CALL RSPEAK(180)
  295. XC                        !JOKE.
  296. X    RETURN
  297. XC
  298. X18100    IF(PRSA.NE.CLOSEW) GO TO 18200
  299. XC                        !CLOSE?
  300. X    CALL RSPEAK(181)
  301. X    RETURN
  302. XC
  303. X18200    IF(PRSA.NE.BURNW) GO TO 10
  304. XC                        !BURN?
  305. X    CALL NEWSTA(PRSO,0,0,0,0)
  306. XC                        !FATAL JOKE.
  307. X    CALL JIGSUP(182)
  308. X    RETURN
  309. XC OAPPLI, PAGE 6
  310. XC
  311. XC O107--    CANDLES, PROCESSED EXTERNALLY
  312. XC
  313. X19000    OAPPLI=LIGHTP(CANDL)
  314. X    RETURN
  315. XC
  316. XC O108--    MATCHES, PROCESSED EXTERNALLY
  317. XC
  318. X20000    OAPPLI=LIGHTP(MATCH)
  319. X    RETURN
  320. XC
  321. XC O109--    CYCLOPS, PROCESSED EXTERNALLY.
  322. XC
  323. X22000    OAPPLI=CYCLOP(ARG)
  324. XC                        !CYCLOPS
  325. X    RETURN
  326. XC
  327. XC O110--    THIEF, PROCESSED EXTERNALLY
  328. XC
  329. X25000    OAPPLI=THIEFP(ARG)
  330. X    RETURN
  331. XC
  332. XC O111--    WINDOW
  333. XC
  334. X26000    OAPPLI=OPNCLS(WINDO,208,209)
  335. XC                        !OPEN/CLS WINDOW.
  336. X    RETURN
  337. XC
  338. XC O112--    PILE OF BODIES
  339. XC
  340. X32000    IF(PRSA.NE.TAKEW) GO TO 32500
  341. XC                        !TAKE?
  342. X    CALL RSPEAK(228)
  343. XC                        !CANT.
  344. X    RETURN
  345. XC
  346. X32500    IF((PRSA.NE.BURNW).AND.(PRSA.NE.MUNGW)) GO TO 10
  347. X    IF(ONPOLF) RETURN
  348. XC                        !BURN OR MUNG?
  349. X    ONPOLF=.TRUE.
  350. XC                        !SET HEAD ON POLE.
  351. X    CALL NEWSTA(HPOLE,0,LLD2,0,0)
  352. X    CALL JIGSUP(229)
  353. XC                        !BEHEADED.
  354. X    RETURN
  355. XC
  356. XC O113--    VAMPIRE BAT
  357. XC
  358. X35000    CALL RSPEAK(50)
  359. XC                        !TIME TO FLY, JACK.
  360. X    F=MOVETO(BATDRP(RND(9)+1),WINNER)
  361. XC                        !SELECT RANDOM DEST.
  362. X    F=RMDESC(0)
  363. X    RETURN
  364. XC OAPPLI, PAGE 7
  365. XC
  366. XC O114--    STICK
  367. XC
  368. X39000    IF(PRSA.NE.WAVEW) GO TO 10
  369. XC                        !WAVE?
  370. X    IF(HERE.EQ.MRAIN) GO TO 39500
  371. XC                        !ON RAINBOW?
  372. X    IF((HERE.EQ.POG).OR.(HERE.EQ.FALLS)) GO TO 39200
  373. X    CALL RSPEAK(244)
  374. XC                        !NOTHING HAPPENS.
  375. X    RETURN
  376. XC
  377. X39200    OFLAG1(POT)=or(OFLAG1(POT),VISIBT)
  378. X    RAINBF=.NOT. RAINBF
  379. XC                        !COMPLEMENT RAINBOW.
  380. X    I=245
  381. XC                        !ASSUME OFF.
  382. X    IF(RAINBF) I=246
  383. XC                        !IF ON, SOLID.
  384. X    CALL RSPEAK(I)
  385. XC                        !DESCRIBE.
  386. X    RETURN
  387. XC
  388. X39500    RAINBF=.FALSE.
  389. XC                        !ON RAINBOW,
  390. X    CALL JIGSUP(247)
  391. XC                        !TAKE A FALL.
  392. X    RETURN
  393. XC
  394. XC O115--    BALLOON, HANDLED EXTERNALLY
  395. XC
  396. X40000    OAPPLI=BALLOP(ARG)
  397. X    RETURN
  398. XC
  399. XC O116--    HEADS
  400. XC
  401. X45000    IF(PRSA.NE.HELLOW) GO TO 45100
  402. XC                        !HELLO HEADS?
  403. X    CALL RSPEAK(633)
  404. XC                        !TRULY BIZARRE.
  405. X    RETURN
  406. XC
  407. X45100    IF(PRSA.EQ.READW) GO TO 10
  408. XC                        !READ IS OK.
  409. X    CALL NEWSTA(LCASE,260,LROOM,0,0)
  410. XC                        !MAKE LARGE CASE.
  411. X    I=ROBADV(WINNER,0,LCASE,0)+ROBRM(HERE,100,0,LCASE,0)
  412. X    CALL JIGSUP(261)
  413. XC                        !KILL HIM.
  414. X    RETURN
  415. XC OAPPLI, PAGE 8
  416. XC
  417. XC O117--    SPHERE
  418. XC
  419. X47000    IF(CAGESF.OR.(PRSA.NE.TAKEW)) GO TO 10
  420. XC                        !TAKE?
  421. X    IF(WINNER.NE.PLAYER) GO TO 47500
  422. XC                        !ROBOT TAKE?
  423. X    CALL RSPEAK(263)
  424. XC                        !NO, DROP CAGE.
  425. X    IF(OROOM(ROBOT).NE.HERE) GO TO 47200
  426. XC                        !ROBOT HERE?
  427. X    F=MOVETO(CAGED,WINNER)
  428. XC                        !YES, MOVE INTO CAGE.
  429. X    CALL NEWSTA(ROBOT,0,CAGED,0,0)
  430. XC                        !MOVE ROBOT.
  431. X    AROOM(AROBOT)=CAGED
  432. X    OFLAG1(ROBOT)=or(OFLAG1(ROBOT),NDSCBT)
  433. X    CTICK(CEVSPH)=10
  434. XC                        !GET OUT IN 10 OR ELSE.
  435. X    RETURN
  436. XC
  437. X47200    CALL NEWSTA(SPHER,0,0,0,0)
  438. XC                        !YOURE DEAD.
  439. X    RFLAG(CAGER)=or(RFLAG(CAGER),RMUNG)
  440. X    RRAND(CAGER)=147
  441. X    CALL JIGSUP(148)
  442. XC                        !MUNG PLAYER.
  443. X    RETURN
  444. XC
  445. X47500    CALL NEWSTA(SPHER,0,0,0,0)
  446. XC                        !ROBOT TRIED,
  447. X    CALL NEWSTA(ROBOT,264,0,0,0)
  448. XC                        !KILL HIM.
  449. X    CALL NEWSTA(CAGE,0,HERE,0,0)
  450. XC                        !INSERT MANGLED CAGE.
  451. X    RETURN
  452. XC
  453. XC O118--    GEOMETRICAL BUTTONS
  454. XC
  455. X48000    IF(PRSA.NE.PUSHW) GO TO 10
  456. XC                        !PUSH?
  457. X    I=PRSO-SQBUT+1
  458. XC                        !GET BUTTON INDEX.
  459. X    IF((I.LE.0).OR.(I.GE.4)) GO TO 10
  460. XC                        !A BUTTON?
  461. X    IF(WINNER.NE.PLAYER) GO TO (48100,48200,48300),I
  462. X    CALL JIGSUP(265)
  463. XC                        !YOU PUSHED, YOU DIE.
  464. X    RETURN
  465. XC
  466. X48100    I=267
  467. X    IF(CAROZF) I=266
  468. XC                        !SPEED UP?
  469. X    CAROZF=.TRUE.
  470. X    CALL RSPEAK(I)
  471. X    RETURN
  472. XC
  473. X48200    I=266
  474. XC                        !ASSUME NO CHANGE.
  475. X    IF(CAROZF) I=268
  476. X    CAROZF=.FALSE.
  477. X    CALL RSPEAK(I)
  478. X    RETURN
  479. XC
  480. X48300    CAROFF=.NOT.CAROFF
  481. XC                        !FLIP CAROUSEL.
  482. X    IF(.NOT.QHERE(IRBOX,CAROU)) RETURN
  483. XC                        !IRON BOX IN CAROUSEL?
  484. X    CALL RSPEAK(269)
  485. XC                        !YES, THUMP.
  486. X    OFLAG1(IRBOX)=xor(OFLAG1(IRBOX),VISIBT)
  487. X    IF(CAROFF) RFLAG(CAROU)=and(RFLAG(CAROU), not(RSEEN))
  488. X    RETURN
  489. XC
  490. XC O119--    FLASK FUNCTION
  491. XC
  492. X49000    IF(PRSA.EQ.OPENW) GO TO 49100
  493. XC                        !OPEN?
  494. X    IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
  495. X    CALL NEWSTA(FLASK,270,0,0,0)
  496. XC                        !KILL FLASK.
  497. X49100    RFLAG(HERE)=or(RFLAG(HERE),RMUNG)
  498. X    RRAND(HERE)=271
  499. X    CALL JIGSUP(272)
  500. XC                        !POISONED.
  501. X    RETURN
  502. XC
  503. XC O120--    BUCKET FUNCTION
  504. XC
  505. X50000    IF(ARG.NE.2) GO TO 10
  506. XC                        !READOUT?
  507. X    IF((OCAN(WATER).NE.BUCKE).OR.BUCKTF) GO TO 50500
  508. X    BUCKTF=.TRUE.
  509. XC                        !BUCKET AT TOP.
  510. X    CTICK(CEVBUC)=100
  511. XC                        !START COUNTDOWN.
  512. X    CALL NEWSTA(BUCKE,290,TWELL,0,0)
  513. XC                        !REPOSITION BUCKET.
  514. X    GO TO 50900
  515. XC                        !FINISH UP.
  516. XC
  517. X50500    IF((OCAN(WATER).EQ.BUCKE).OR..NOT.BUCKTF) GO TO 10
  518. X    BUCKTF=.FALSE.
  519. X    CALL NEWSTA(BUCKE,291,BWELL,0,0)
  520. XC                        !BUCKET AT BOTTOM.
  521. X50900    IF(AV.NE.BUCKE) RETURN
  522. XC                        !IN BUCKET?
  523. X    F=MOVETO(OROOM(BUCKE),WINNER)
  524. XC                        !MOVE ADVENTURER.
  525. X    F=RMDESC(0)
  526. XC                        !DESCRIBE ROOM.
  527. X    RETURN
  528. XC OAPPLI, PAGE 9
  529. XC
  530. XC O121--    EATME CAKE
  531. XC
  532. X51000    IF((PRSA.NE.EATW).OR.(PRSO.NE.ECAKE).OR.
  533. X&        (HERE.NE.ALICE)) GO TO 10
  534. X    CALL NEWSTA(ECAKE,273,0,0,0)
  535. XC                        !VANISH CAKE.
  536. X    OFLAG1(ROBOT)=and(OFLAG1(ROBOT), not(VISIBT))
  537. X    OAPPLI=MOVETO(ALISM,WINNER)
  538. XC                        !MOVE TO ALICE SMALL.
  539. X    IZ=64
  540. X    IR=ALISM
  541. X    IO=ALICE
  542. X    GO TO 52405
  543. XC
  544. XC O122--    ICINGS
  545. XC
  546. X52000    IF(PRSA.NE.READW) GO TO 52200
  547. XC                        !READ?
  548. X    I=274
  549. XC                        !CANT READ.
  550. X    IF(PRSI.NE.0) I=275
  551. XC                        !THROUGH SOMETHING?
  552. X    IF(PRSI.EQ.BOTTL) I=276
  553. XC                        !THROUGH BOTTLE?
  554. X    IF(PRSI.EQ.FLASK) I=277+(PRSO-ORICE)
  555. XC                        !THROUGH FLASK?
  556. X    CALL RSPEAK(I)
  557. XC                        !READ FLASK.
  558. X    RETURN
  559. XC
  560. X52200    IF((PRSA.NE.THROWW).OR.(PRSO.NE.RDICE).OR.(PRSI.NE.POOL))
  561. X&        GO TO 52300
  562. X    CALL NEWSTA(POOL,280,0,0,0)
  563. XC                        !VANISH POOL.
  564. X    OFLAG1(SAFFR)=or(OFLAG1(SAFFR),VISIBT)
  565. X    RETURN
  566. XC
  567. X52300    IF((HERE.NE.ALICE).AND.(HERE.NE.ALISM).AND.(HERE.NE.ALITR))
  568. X&        GO TO 10
  569. X    IF(((PRSA.NE.EATW).AND.(PRSA.NE.THROWW)).OR.
  570. X&        (PRSO.NE.ORICE)) GO TO 52400
  571. X    CALL NEWSTA(ORICE,0,0,0,0)
  572. XC                        !VANISH ORANGE ICE.
  573. X    RFLAG(HERE)=or(RFLAG(HERE),RMUNG)
  574. X    RRAND(HERE)=281
  575. X    CALL JIGSUP(282)
  576. XC                        !VANISH ADVENTURER.
  577. X    RETURN
  578. XC
  579. X52400    IF((PRSA.NE.EATW).OR.(PRSO.NE.BLICE))
  580. X&        GO TO 10
  581. X    CALL NEWSTA(BLICE,283,0,0,0)
  582. XC                        !VANISH BLUE ICE.
  583. X    IF(HERE.NE.ALISM) GO TO 52500
  584. XC                        !IN REDUCED ROOM?
  585. X    OFLAG1(ROBOT)=or(OFLAG1(ROBOT),VISIBT)
  586. X    IO=HERE
  587. X    OAPPLI=MOVETO(ALICE,WINNER)
  588. X    IZ=1/64
  589. X    IR=ALICE
  590. XC
  591. XC  Do a size change, common loop used also by code at 51000
  592. XC
  593. X52405    DO 52450 I=1,OLNT
  594. XC                        !ENLARGE WORLD.
  595. X      IF((OROOM(I).NE.IO).OR.(OSIZE(I).EQ.10000))
  596. X&        GO TO 52450
  597. X      OROOM(I)=IR
  598. X      OSIZE(I)=OSIZE(I)*IZ
  599. X52450    CONTINUE
  600. X    RETURN
  601. XC
  602. X52500    CALL JIGSUP(284)
  603. XC                        !ENLARGED IN WRONG ROOM.
  604. X    RETURN
  605. XC
  606. XC O123--    BRICK
  607. XC
  608. X54000    IF(PRSA.NE.BURNW) GO TO 10
  609. XC                        !BURN?
  610. X    CALL JIGSUP(150)
  611. XC                        !BOOM
  612. XC                        !
  613. X    RETURN
  614. XC
  615. XC O124--    MYSELF
  616. XC
  617. X55000    IF(PRSA.NE.GIVEW) GO TO 55100
  618. XC                        !GIVE?
  619. X    CALL NEWSTA(PRSO,2,0,0,PLAYER)
  620. XC                        !DONE.
  621. X    RETURN
  622. XC
  623. X55100    IF(PRSA.NE.TAKEW) GO TO 55200
  624. XC                        !TAKE?
  625. X    CALL RSPEAK(286)
  626. XC                        !JOKE.
  627. X    RETURN
  628. XC
  629. X55200    IF((PRSA.NE.KILLW).AND.(PRSA.NE.MUNGW)) GO TO 10
  630. X    CALL JIGSUP(287)
  631. XC                        !KILL, NO JOKE.
  632. X    RETURN
  633. XC OAPPLI, PAGE 10
  634. XC
  635. XC O125--    PANELS INSIDE MIRROR
  636. XC
  637. X56000    IF(PRSA.NE.PUSHW) GO TO 10
  638. XC                        !PUSH?
  639. X    IF(POLEUF.NE.0) GO TO 56100
  640. XC                        !SHORT POLE UP?
  641. X    I=731
  642. XC                        !NO, WONT BUDGE.
  643. X    IF(MOD(MDIR,180).EQ.0) I=732
  644. XC                        !DIFF MSG IF N-S.
  645. X    CALL RSPEAK(I)
  646. XC                        !TELL WONT MOVE.
  647. X    RETURN
  648. XC
  649. X56100    IF(MLOC.NE.MRG) GO TO 56200
  650. XC                        !IN GDN ROOM?
  651. X    CALL RSPEAK(733)
  652. XC                        !YOU LOSE.
  653. X    CALL JIGSUP(685)
  654. X    RETURN
  655. XC
  656. X56200    I=831
  657. XC                        !ROTATE L OR R.
  658. X    IF((PRSO.EQ.RDWAL).OR.(PRSO.EQ.YLWAL)) I=830
  659. X    CALL RSPEAK(I)
  660. XC                        !TELL DIRECTION.
  661. X    MDIR=MOD(MDIR+45+(270*(I-830)),360)
  662. XC                        !CALCULATE NEW DIR.
  663. X    CALL RSPSUB(734,695+(MDIR/45))
  664. XC                        !TELL NEW DIR.
  665. X    IF(WDOPNF) CALL RSPEAK(730)
  666. XC                        !IF PANEL OPEN, CLOSE.
  667. X    WDOPNF=.FALSE.
  668. X    RETURN
  669. XC                        !DONE.
  670. XC
  671. XC O126--    ENDS INSIDE MIRROR
  672. XC
  673. X57000    IF(PRSA.NE.PUSHW) GO TO 10
  674. XC                        !PUSH?
  675. X    IF(MOD(MDIR,180).EQ.0) GO TO 57100
  676. XC                        !MIRROR N-S?
  677. X    CALL RSPEAK(735)
  678. XC                        !NO, WONT BUDGE.
  679. X    RETURN
  680. XC
  681. X57100    IF(PRSO.NE.PINDR) GO TO 57300
  682. XC                        !PUSH PINE WALL?
  683. X    IF(((MLOC.EQ.MRC).AND.(MDIR.EQ.180)).OR.
  684. X&      ((MLOC.EQ.MRD).AND.(MDIR.EQ.0)).OR.
  685. X&       (MLOC.EQ.MRG)) GO TO 57200
  686. X    CALL RSPEAK(736)
  687. XC                        !NO, OPENS.
  688. X    WDOPNF=.TRUE.
  689. XC                        !INDICATE OPEN.
  690. X    CFLAG(CEVPIN)=.TRUE.
  691. XC                        !TIME OPENING.
  692. X    CTICK(CEVPIN)=5
  693. X    RETURN
  694. XC
  695. X57200    CALL RSPEAK(737)
  696. XC                        !GDN SEES YOU, DIE.
  697. X    CALL JIGSUP(685)
  698. X    RETURN
  699. XC
  700. X57300    NLOC=MLOC-1
  701. XC                        !NEW LOC IF SOUTH.
  702. X    IF(MDIR.EQ.0) NLOC=MLOC+1
  703. XC                        !NEW LOC IF NORTH.
  704. X    IF((NLOC.GE.MRA).AND.(NLOC.LE.MRD)) GO TO 57400
  705. X    CALL RSPEAK(738)
  706. XC                        !HAVE REACHED END.
  707. X    RETURN
  708. XC
  709. X57400    I=699
  710. XC                        !ASSUME SOUTH.
  711. X    IF(MDIR.EQ.0) I=695
  712. XC                        !NORTH.
  713. X    J=739
  714. XC                        !ASSUME SMOOTH.
  715. X    IF(POLEUF.NE.0) J=740
  716. XC                        !POLE UP, WOBBLES.
  717. X    CALL RSPSUB(J,I)
  718. XC                        !DESCRIBE.
  719. X    MLOC=NLOC
  720. X    IF(MLOC.NE.MRG) RETURN
  721. XC                        !NOW IN GDN ROOM?
  722. XC
  723. X    IF(POLEUF.NE.0) GO TO 57500
  724. XC                        !POLE UP, GDN SEES.
  725. X    IF(MROPNF.OR.WDOPNF) GO TO 57600
  726. XC                        !DOOR OPEN, GDN SEES.
  727. X    IF(MR1F.AND.MR2F) RETURN
  728. XC                        !MIRRORS INTACT, OK.
  729. X    CALL RSPEAK(742)
  730. XC                        !MIRRORS BROKEN, DIE.
  731. X    CALL JIGSUP(743)
  732. X    RETURN
  733. XC
  734. X57500    CALL RSPEAK(741)
  735. XC                        !POLE UP, DIE.
  736. X    CALL JIGSUP(743)
  737. X    RETURN
  738. XC
  739. X57600    CALL RSPEAK(744)
  740. XC                        !DOOR OPEN, DIE.
  741. X    CALL JIGSUP(743)
  742. X    RETURN
  743. XC OAPPLI, PAGE 11
  744. XC
  745. XC O127--    GLOBAL GUARDIANS
  746. XC
  747. X58000    IF((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND.
  748. X&      (PRSA.NE.MUNGW)) GO TO 58100
  749. X    CALL JIGSUP(745)
  750. XC                        !LOSE.
  751. X    RETURN
  752. XC
  753. X58100    IF(PRSA.NE.HELLOW) GO TO 10
  754. XC                        !HELLO?
  755. X    CALL RSPEAK(746)
  756. XC                        !NO REPLY.
  757. X    RETURN
  758. XC
  759. XC O128--    GLOBAL MASTER
  760. XC
  761. X59000    IF((PRSA.NE.ATTACW).AND.(PRSA.NE.KILLW).AND.
  762. X&      (PRSA.NE.MUNGW)) GO TO 59100
  763. X    CALL JIGSUP(747)
  764. XC                        !BAD IDEA.
  765. X    RETURN
  766. XC
  767. X59100    IF(PRSA.NE.TAKEW) GO TO 10
  768. XC                        !TAKE?
  769. X    CALL RSPEAK(748)
  770. XC                        !JOKE.
  771. X    RETURN
  772. XC
  773. XC O129--    NUMERAL FIVE (FOR JOKE)
  774. XC
  775. X60000    IF(PRSA.NE.TAKEW) GO TO 10
  776. XC                        !TAKE FIVE?
  777. X    CALL RSPEAK(419)
  778. XC                        !TIME PASSES.
  779. X    DO 60100 I=1,3
  780. XC                        !WAIT A WHILE.
  781. X      IF(CLOCKD(X)) RETURN
  782. X60100    CONTINUE
  783. X    RETURN
  784. XC
  785. XC O130--    CRYPT FUNCTION
  786. XC
  787. X61000    IF(.NOT.ENDGMF) GO TO 45000
  788. XC                        !IF NOT EG, DIE.
  789. X    IF(PRSA.NE.OPENW) GO TO 61100
  790. XC                        !OPEN?
  791. X    I=793
  792. X    IF(QOPEN(TOMB)) I=794
  793. X    CALL RSPEAK(I)
  794. X    OFLAG2(TOMB)=or(OFLAG2(TOMB),OPENBT)
  795. X    RETURN
  796. XC
  797. X61100    IF(PRSA.NE.CLOSEW) GO TO 45000
  798. XC                        !CLOSE?
  799. X    I=795
  800. X    IF(QOPEN(TOMB)) I=796
  801. X    CALL RSPEAK(I)
  802. X    OFLAG2(TOMB)=and(OFLAG2(TOMB),not(OPENBT))
  803. X    IF(HERE.EQ.CRYPT) CTICK(CEVSTE)=3
  804. XC                        !IF IN CRYPT, START EG.
  805. X    RETURN
  806. XC OAPPLI, PAGE 12
  807. XC
  808. XC O131--    GLOBAL LADDER
  809. XC
  810. X62000    IF((CPVEC(CPHERE+1).EQ.-2).OR.(CPVEC(CPHERE-1).EQ.-3))
  811. X&        GO TO 62100
  812. X    CALL RSPEAK(865)
  813. XC                        !NO, LOSE.
  814. X    RETURN
  815. XC
  816. X62100    IF((PRSA.EQ.CLMBW).OR.(PRSA.EQ.CLMBUW)) GO TO 62200
  817. X    CALL RSPEAK(866)
  818. XC                        !CLIMB IT?
  819. X    RETURN
  820. XC
  821. X62200    IF((CPHERE.EQ.10).AND.(CPVEC(CPHERE+1).EQ.-2))
  822. X&        GO TO 62300
  823. X    CALL RSPEAK(867)
  824. XC                        !NO, HIT YOUR HEAD.
  825. X    RETURN
  826. XC
  827. X62300    F=MOVETO(CPANT,WINNER)
  828. XC                        !TO ANTEROOM.
  829. X    F=RMDESC(3)
  830. XC                        !DESCRIBE.
  831. X    RETURN
  832. XC
  833. X    END
  834. END_OF_objcts.F
  835. if test 15854 -ne `wc -c <objcts.F`; then
  836.     echo shar: \"objcts.F\" unpacked with wrong size!
  837. fi
  838. # end of overwriting check
  839. fi
  840. if test -f rooms.F -a "${1}" != "-c" ; then 
  841.   echo shar: Will not over-write existing file \"rooms.F\"
  842. else
  843. echo shar: Extracting \"rooms.F\" \(13238 characters\)
  844. sed "s/^X//" >rooms.F <<'END_OF_rooms.F'
  845. XC RAPPL1- SPECIAL PURPOSE ROOM ROUTINES, PART 1
  846. XC
  847. XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  848. XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  849. XC WRITTEN BY R. M. SUPNIK
  850. XC
  851. XC DECLARATIONS
  852. XC
  853. X    LOGICAL FUNCTION RAPPL1(RI)
  854. X    IMPLICIT INTEGER (A-Z)
  855. X    LOGICAL QOPEN,QON,QHERE,PROB,F
  856. X    LOGICAL MOVETO,LIT
  857. X#include "parser.h"
  858. X#include "gamestate.h"
  859. X#include "state.h"
  860. XC
  861. XC SCREEN OF LIGHT
  862. XC
  863. X    COMMON /SCREEN/ FROMDR,SCOLRM,SCOLAC
  864. X    COMMON /SCREEN/ SCOLDR(8),SCOLWL(12)
  865. XC
  866. XC MISCELLANEOUS VARIABLES
  867. XC
  868. X    COMMON /BATS/ BATDRP(9)
  869. X#include "rooms.h"
  870. X#include "rflag.h"
  871. X#include "rindex.h"
  872. X#include "objects.h"
  873. X#include "oflags.h"
  874. X#include "oindex.h"
  875. X#include "clock.h"
  876. X#include "villians.h"
  877. X#include "advers.h"
  878. X#include "verbs.h"
  879. X#include "flags.h"
  880. XC
  881. XC FUNCTIONS AND DATA
  882. XC
  883. X    QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
  884. X    QON(R)=and(OFLAG1(R),ONBT).NE.0
  885. XC RAPPL1, PAGE 2
  886. XC
  887. X    RAPPL1=.TRUE.
  888. XC                        !USUALLY IGNORED.
  889. X    IF(RI.EQ.0) RETURN
  890. XC                        !RETURN IF NAUGHT.
  891. XC
  892. XC                        !SET TO FALSE FOR
  893. XC
  894. XC                        !NEW DESC NEEDED.
  895. X    GO TO (1000,2000,3000,4000,5000,6000,7000,8000,9000,10000,
  896. X&     11000,12000,13000,14000,15000,16000,17000,18000,19000,20000,
  897. X&     21000,22000,23000,24000,25000,26000,27000,28000,29000,30000,
  898. X&     31000,32000,33000,34000,35000,36000,37000),RI
  899. X    CALL BUG(1,RI)
  900. XC
  901. XC R1--    EAST OF HOUSE.  DESCRIPTION DEPENDS ON STATE OF WINDOW
  902. XC
  903. X1000    IF(PRSA.NE.LOOKW) RETURN
  904. XC                        !LOOK?
  905. X    I=13
  906. XC                        !ASSUME CLOSED.
  907. X    IF(QOPEN(WINDO)) I=12
  908. XC                        !IF OPEN, AJAR.
  909. X    CALL RSPSUB(11,I)
  910. XC                        !DESCRIBE.
  911. X    RETURN
  912. XC
  913. XC R2--    KITCHEN.  SAME VIEW FROM INSIDE.
  914. XC
  915. X2000    IF(PRSA.NE.LOOKW) RETURN
  916. XC                        !LOOK?
  917. X    I=13
  918. XC                        !ASSUME CLOSED.
  919. X    IF(QOPEN(WINDO)) I=12
  920. XC                        !IF OPEN, AJAR.
  921. X    CALL RSPSUB(14,I)
  922. XC                        !DESCRIBE.
  923. X    RETURN
  924. XC
  925. XC R3--    LIVING ROOM.  DESCRIPTION DEPENDS ON MAGICF (STATE OF
  926. XC    DOOR TO CYCLOPS ROOM), RUG (MOVED OR NOT), DOOR (OPEN OR CLOSED)
  927. XC
  928. X3000    IF(PRSA.NE.LOOKW) GO TO 3500
  929. XC                        !LOOK?
  930. X    I=15
  931. XC                        !ASSUME NO HOLE.
  932. X    IF(MAGICF) I=16
  933. XC                        !IF MAGICF, CYCLOPS HOLE.
  934. X    CALL RSPEAK(I)
  935. XC                        !DESCRIBE.
  936. X    I=17+ORRUG
  937. XC                        !ASSUME INITIAL STATE.
  938. X    IF(QOPEN(DOOR)) I=I+2
  939. XC                        !DOOR OPEN?
  940. X    CALL RSPEAK(I)
  941. XC                        !DESCRIBE.
  942. X    RETURN
  943. XC
  944. XC    NOT A LOOK WORD.  REEVALUATE TROPHY CASE.
  945. XC
  946. X3500    IF((PRSA.NE.TAKEW).AND.((PRSA.NE.PUTW).OR.(PRSI.NE.TCASE)))
  947. X&        RETURN
  948. X    ASCORE(WINNER)=RWSCOR
  949. XC                        !SCORE TROPHY CASE.
  950. X    DO 3600 I=1,OLNT
  951. XC                        !RETAIN RAW SCORE AS WELL.
  952. X      J=I
  953. XC                        !FIND OUT IF IN CASE.
  954. X3550      J=OCAN(J)
  955. XC                        !TRACE OWNERSHIP.
  956. X      IF(J.EQ.0) GO TO 3600
  957. X      IF(J.NE.TCASE) GO TO 3550
  958. XC                        !DO ALL LEVELS.
  959. X      ASCORE(WINNER)=ASCORE(WINNER)+OTVAL(I)
  960. X3600    CONTINUE
  961. X    CALL SCRUPD(0)
  962. XC                        !SEE IF ENDGAME TRIG.
  963. X    RETURN
  964. XC RAPPL1, PAGE 3
  965. XC
  966. XC R4--    CELLAR.  SHUT DOOR AND BAR IT IF HE JUST WALKED IN.
  967. XC
  968. X4000    IF(PRSA.NE.LOOKW) GO TO 4500
  969. XC                        !LOOK?
  970. X    CALL RSPEAK(21)
  971. XC                        !DESCRIBE CELLAR.
  972. X    RETURN
  973. XC
  974. X4500    IF(PRSA.NE.WALKIW) RETURN
  975. XC                        !WALKIN?
  976. X    IF(and(OFLAG2(DOOR),(OPENBT+TCHBT)).NE.OPENBT) RETURN
  977. X    OFLAG2(DOOR)=and(and(OFLAG2(DOOR),CHBT), not(OPENBT))
  978. X    CALL RSPEAK(22)
  979. XC                        !SLAM AND BOLT DOOR.
  980. X    RETURN
  981. XC
  982. XC R5--    MAZE11.  DESCRIBE STATE OF GRATING.
  983. XC
  984. X5000    IF(PRSA.NE.LOOKW) RETURN
  985. XC                        !LOOK?
  986. X    CALL RSPEAK(23)
  987. XC                        !DESCRIBE.
  988. X    I=24
  989. XC                        !ASSUME LOCKED.
  990. X    IF(GRUNLF) I=26
  991. XC                        !UNLOCKED?
  992. X    IF(QOPEN(GRATE)) I=25
  993. XC                        !OPEN?
  994. X    CALL RSPEAK(I)
  995. XC                        !DESCRIBE GRATE.
  996. X    RETURN
  997. XC
  998. XC R6--    CLEARING.  DESCRIBE CLEARING, MOVE LEAVES.
  999. XC
  1000. X6000    IF(PRSA.NE.LOOKW) GO TO 6500
  1001. XC                        !LOOK?
  1002. X    CALL RSPEAK(27)
  1003. XC                        !DESCRIBE.
  1004. X    IF(RVCLR.EQ.0) RETURN
  1005. XC                        !LEAVES MOVED?
  1006. X    I=28
  1007. XC                        !YES, ASSUME GRATE CLOSED.
  1008. X    IF(QOPEN(GRATE)) I=29
  1009. XC                        !OPEN?
  1010. X    CALL RSPEAK(I)
  1011. XC                        !DESCRIBE GRATE.
  1012. X    RETURN
  1013. XC
  1014. X6500    IF((RVCLR.NE.0).OR.(QHERE(LEAVE,CLEAR).AND.
  1015. X&        ((PRSA.NE.MOVEW).OR.(PRSO.NE.LEAVE)))) RETURN
  1016. X    CALL RSPEAK(30)
  1017. XC                        !MOVE LEAVES, REVEAL GRATE.
  1018. X    RVCLR=1
  1019. XC                        !INDICATE LEAVES MOVED.
  1020. X    RETURN
  1021. XC RAPPL1, PAGE 4
  1022. XC
  1023. XC R7--    RESERVOIR SOUTH.  DESCRIPTION DEPENDS ON LOW TIDE FLAG.
  1024. XC
  1025. X7000    IF(PRSA.NE.LOOKW) RETURN
  1026. XC                        !LOOK?
  1027. X    I=31
  1028. XC                        !ASSUME FULL.
  1029. X    IF(LWTIDF) I=32
  1030. XC                        !IF LOW TIDE, EMPTY.
  1031. X    CALL RSPEAK(I)
  1032. XC                        !DESCRIBE.
  1033. X    CALL RSPEAK(33)
  1034. XC                        !DESCRIBE EXITS.
  1035. X    RETURN
  1036. XC
  1037. XC R8--    RESERVOIR.  STATE DEPENDS ON LOW TIDE FLAG.
  1038. XC
  1039. X8000    IF(PRSA.NE.LOOKW) RETURN
  1040. XC                        !LOOK?
  1041. X    I=34
  1042. XC                        !ASSUME FULL.
  1043. X    IF(LWTIDF) I=35
  1044. XC                        !IF LOW TIDE, EMTPY.
  1045. X    CALL RSPEAK(I)
  1046. XC                        !DESCRIBE.
  1047. X    RETURN
  1048. XC
  1049. XC R9--    RESERVOIR NORTH.  ALSO DEPENDS ON LOW TIDE FLAG.
  1050. XC
  1051. X9000    IF(PRSA.NE.LOOKW) RETURN
  1052. XC                        !LOOK?
  1053. X    I=36
  1054. XC                        !YOU GET THE IDEA.
  1055. X    IF(LWTIDF) I=37
  1056. X    CALL RSPEAK(I)
  1057. X    CALL RSPEAK(38)
  1058. X    RETURN
  1059. XC
  1060. XC R10--    GLACIER ROOM.  STATE DEPENDS ON MELTED, VANISHED FLAGS.
  1061. XC
  1062. X10000    IF(PRSA.NE.LOOKW) RETURN
  1063. XC                        !LOOK?
  1064. X    CALL RSPEAK(39)
  1065. XC                        !BASIC DESCRIPTION.
  1066. X    I=0
  1067. XC                        !ASSUME NO CHANGES.
  1068. X    IF(GLACMF) I=40
  1069. XC                        !PARTIAL MELT?
  1070. X    IF(GLACRF) I=41
  1071. XC                        !COMPLETE MELT?
  1072. X    CALL RSPEAK(I)
  1073. XC                        !DESCRIBE.
  1074. X    RETURN
  1075. XC
  1076. XC R11--    FOREST ROOM
  1077. XC
  1078. X11000    IF(PRSA.EQ.WALKIW) CFLAG(CEVFOR)=.TRUE.
  1079. XC                        !IF WALK IN, BIRDIE.
  1080. X    RETURN
  1081. XC
  1082. XC R12--    MIRROR ROOM.  STATE DEPENDS ON MIRROR INTACT.
  1083. XC
  1084. X12000    IF(PRSA.NE.LOOKW) RETURN
  1085. XC                        !LOOK?
  1086. X    CALL RSPEAK(42)
  1087. XC                        !DESCRIBE.
  1088. X    IF(MIRRMF) CALL RSPEAK(43)
  1089. XC                        !IF BROKEN, NASTY REMARK.
  1090. X    RETURN
  1091. XC RAPPL1, PAGE 5
  1092. XC
  1093. XC R13--    CAVE2 ROOM.  BLOW OUT CANDLES WITH 50% PROBABILITY.
  1094. XC
  1095. X13000    IF(PRSA.NE.WALKIW) RETURN
  1096. XC                        !WALKIN?
  1097. X    IF(PROB(50,50).OR.(OADV(CANDL).NE.WINNER).OR.
  1098. X&        .NOT.QON(CANDL)) RETURN
  1099. X    OFLAG1(CANDL)=and(OFLAG1(CANDL), not(ONBT))
  1100. X    CALL RSPEAK(47)
  1101. XC                        !TELL OF WINDS.
  1102. X    CFLAG(CEVCND)=.FALSE.
  1103. XC                        !HALT CANDLE COUNTDOWN.
  1104. X    RETURN
  1105. XC
  1106. XC R14--    BOOM ROOM.  BLOW HIM UP IF CARRYING FLAMING OBJECT.
  1107. XC
  1108. X14000    J=ODESC2(CANDL)
  1109. XC                        !ASSUME CANDLE.
  1110. X    IF((OADV(CANDL).EQ.WINNER).AND.QON(CANDL)) GO TO 14100
  1111. X    J=ODESC2(TORCH)
  1112. XC                        !ASSUME TORCH.
  1113. X    IF((OADV(TORCH).EQ.WINNER).AND.QON(TORCH)) GO TO 14100
  1114. X    J=ODESC2(MATCH)
  1115. X    IF((OADV(MATCH).EQ.WINNER).AND.QON(MATCH)) GO TO 14100
  1116. X    RETURN
  1117. XC                        !SAFE
  1118. XC
  1119. X14100    IF(PRSA.NE.TRNONW) GO TO 14200
  1120. XC                        !TURN ON?
  1121. X    CALL RSPSUB(294,J)
  1122. XC                        !BOOM
  1123. XC                        !
  1124. X    CALL JIGSUP(44)
  1125. X    RETURN
  1126. XC
  1127. X14200    IF(PRSA.NE.WALKIW) RETURN
  1128. XC                        !WALKIN?
  1129. X    CALL RSPSUB(295,J)
  1130. XC                        !BOOM
  1131. XC                        !
  1132. X    CALL JIGSUP(44)
  1133. X    RETURN
  1134. XC
  1135. XC R15--    NO-OBJS.  SEE IF EMPTY HANDED, SCORE LIGHT SHAFT.
  1136. XC
  1137. X15000    EMPTHF=.TRUE.
  1138. XC                        !ASSUME TRUE.
  1139. X    DO 15100 I=1,OLNT
  1140. XC                        !SEE IF CARRYING.
  1141. X      IF(OADV(I).EQ.WINNER) EMPTHF=.FALSE.
  1142. X15100    CONTINUE
  1143. XC
  1144. X    IF((HERE.NE.BSHAF).OR.(.NOT.LIT(HERE))) RETURN
  1145. X    CALL SCRUPD(LTSHFT)
  1146. XC                        !SCORE LIGHT SHAFT.
  1147. X    LTSHFT=0
  1148. XC                        !NEVER AGAIN.
  1149. X    RETURN
  1150. XC RAPPL1, PAGE 6
  1151. XC
  1152. XC R16--    MACHINE ROOM.  DESCRIBE MACHINE.
  1153. XC
  1154. X16000    IF(PRSA.NE.LOOKW) RETURN
  1155. XC                        !LOOK?
  1156. X    I=46
  1157. XC                        !ASSUME LID CLOSED.
  1158. X    IF(QOPEN(MACHI)) I=12
  1159. XC                        !IF OPEN, OPEN.
  1160. X    CALL RSPSUB(45,I)
  1161. XC                        !DESCRIBE.
  1162. X    RETURN
  1163. XC
  1164. XC R17--    BAT ROOM.  UNLESS CARRYING GARLIC, FLY AWAY WITH ME...
  1165. XC
  1166. X17000    IF(PRSA.NE.LOOKW) GO TO 17500
  1167. XC                        !LOOK?
  1168. X    CALL RSPEAK(48)
  1169. XC                        !DESCRIBE ROOM.
  1170. X    IF(OADV(GARLI).EQ.WINNER) CALL RSPEAK(49)
  1171. XC                        !BAT HOLDS NOSE.
  1172. X    RETURN
  1173. XC
  1174. X17500    IF((PRSA.NE.WALKIW).OR.(OADV(GARLI).EQ.WINNER)) RETURN
  1175. X    CALL RSPEAK(50)
  1176. XC                        !TIME TO FLY, JACK.
  1177. X    F=MOVETO(BATDRP(RND(9)+1),WINNER)
  1178. XC                        !SELECT RANDOM DEST.
  1179. X    RAPPL1=.FALSE.
  1180. XC                        !INDICATE NEW DESC NEEDED.
  1181. X    RETURN
  1182. XC
  1183. XC R18--    DOME ROOM.  STATE DEPENDS ON WHETHER ROPE TIED TO RAILING.
  1184. XC
  1185. X18000    IF(PRSA.NE.LOOKW) GO TO 18500
  1186. XC                        !LOOK?
  1187. X    CALL RSPEAK(51)
  1188. XC                        !DESCRIBE.
  1189. X    IF(DOMEF) CALL RSPEAK(52)
  1190. XC                        !IF ROPE, DESCRIBE.
  1191. X    RETURN
  1192. XC
  1193. X18500    IF(PRSA.EQ.LEAPW) CALL JIGSUP(53)
  1194. XC                        !DID HE JUMP???
  1195. X    RETURN
  1196. XC
  1197. XC R19--    TORCH ROOM.  ALSO DEPENDS ON WHETHER ROPE TIED TO RAILING.
  1198. XC
  1199. X19000    IF(PRSA.NE.LOOKW) RETURN
  1200. XC                        !LOOK?
  1201. X    CALL RSPEAK(54)
  1202. XC                        !DESCRIBE.
  1203. X    IF(DOMEF) CALL RSPEAK(55)
  1204. XC                        !IF ROPE, DESCRIBE.
  1205. X    RETURN
  1206. XC
  1207. XC R20--    CAROUSEL ROOM.  SPIN HIM OR KILL HIM.
  1208. XC
  1209. X20000    IF(PRSA.NE.LOOKW) GO TO 20500
  1210. XC                        !LOOK?
  1211. X    CALL RSPEAK(56)
  1212. XC                        !DESCRIBE.
  1213. X    IF(.NOT.CAROFF) CALL RSPEAK(57)
  1214. XC                        !IF NOT FLIPPED, SPIN.
  1215. X    RETURN
  1216. XC
  1217. X20500    IF((PRSA.EQ.WALKIW).AND.CAROZF) CALL JIGSUP(58)
  1218. XC                        !WALKED IN.
  1219. X    RETURN
  1220. XC RAPPL1, PAGE 7
  1221. XC
  1222. XC R21--    LLD ROOM.  HANDLE EXORCISE, DESCRIPTIONS.
  1223. XC
  1224. X21000    IF(PRSA.NE.LOOKW) GO TO 21500
  1225. XC                        !LOOK?
  1226. X    CALL RSPEAK(59)
  1227. XC                        !DESCRIBE.
  1228. X    IF(.NOT.LLDF) CALL RSPEAK(60)
  1229. XC                        !IF NOT VANISHED, GHOSTS.
  1230. X    RETURN
  1231. XC
  1232. X21500    IF(PRSA.NE.EXORCW) RETURN
  1233. XC                        !EXORCISE?
  1234. X    IF((OADV(BELL).EQ.WINNER).AND.(OADV(BOOK).EQ.WINNER).AND.
  1235. X&        (OADV(CANDL).EQ.WINNER).AND.QON(CANDL)) GO TO 21600
  1236. X    CALL RSPEAK(62)
  1237. XC                        !NOT EQUIPPED.
  1238. X    RETURN
  1239. XC
  1240. X21600    IF(QHERE(GHOST,HERE)) GO TO 21700
  1241. XC                        !GHOST HERE?
  1242. X    CALL JIGSUP(61)
  1243. XC                        !NOPE, EXORCISE YOU.
  1244. X    RETURN
  1245. XC
  1246. X21700    CALL NEWSTA(GHOST,63,0,0,0)
  1247. XC                        !VANISH GHOST.
  1248. X    LLDF=.TRUE.
  1249. XC                        !OPEN GATE.
  1250. X    RETURN
  1251. XC
  1252. XC R22--    LLD2-ROOM.  IS HIS HEAD ON A POLE?
  1253. XC
  1254. X22000    IF(PRSA.NE.LOOKW) RETURN
  1255. XC                        !LOOK?
  1256. X    CALL RSPEAK(64)
  1257. XC                        !DESCRIBE.
  1258. X    IF(ONPOLF) CALL RSPEAK(65)
  1259. XC                        !ON POLE?
  1260. X    RETURN
  1261. XC
  1262. XC R23--    DAM ROOM.  DESCRIBE RESERVOIR, PANEL.
  1263. XC
  1264. X23000    IF(PRSA.NE.LOOKW) RETURN
  1265. XC                        !LOOK?
  1266. X    CALL RSPEAK(66)
  1267. XC                        !DESCRIBE.
  1268. X    I=67
  1269. X    IF(LWTIDF) I=68
  1270. X    CALL RSPEAK(I)
  1271. XC                        !DESCRIBE RESERVOIR.
  1272. X    CALL RSPEAK(69)
  1273. XC                        !DESCRIBE PANEL.
  1274. X    IF(GATEF) CALL RSPEAK(70)
  1275. XC                        !BUBBLE IS GLOWING.
  1276. X    RETURN
  1277. XC
  1278. XC R24--    TREE ROOM
  1279. XC
  1280. X24000    IF(PRSA.NE.LOOKW) RETURN
  1281. XC                        !LOOK?
  1282. X    CALL RSPEAK(660)
  1283. XC                        !DESCRIBE.
  1284. X    I=661
  1285. XC                        !SET FLAG FOR BELOW.
  1286. X    DO 24200 J=1,OLNT
  1287. XC                        !DESCRIBE OBJ IN FORE3.
  1288. X      IF(.NOT.QHERE(J,FORE3).OR.(J.EQ.FTREE)) GO TO 24200
  1289. X      CALL RSPEAK(I)
  1290. XC                        !SET STAGE,
  1291. X      I=0
  1292. X      CALL RSPSUB(502,ODESC2(J))
  1293. XC                        !DESCRIBE.
  1294. X24200    CONTINUE
  1295. X    RETURN
  1296. XC RAPPL1, PAGE 8
  1297. XC
  1298. XC R25--    CYCLOPS-ROOM.  DEPENDS ON CYCLOPS STATE, ASLEEP FLAG, MAGIC FLAG.
  1299. XC
  1300. X25000    IF(PRSA.NE.LOOKW) RETURN
  1301. XC                        !LOOK?
  1302. X    CALL RSPEAK(606)
  1303. XC                        !DESCRIBE.
  1304. X    I=607
  1305. XC                        !ASSUME BASIC STATE.
  1306. X    IF(RVCYC.GT.0) I=608
  1307. XC                        !>0?  HUNGRY.
  1308. X    IF(RVCYC.LT.0) I=609
  1309. XC                        !<0?  THIRSTY.
  1310. X    IF(CYCLOF) I=610
  1311. XC                        !ASLEEP?
  1312. X    IF(MAGICF) I=611
  1313. XC                        !GONE?
  1314. X    CALL RSPEAK(I)
  1315. XC                        !DESCRIBE.
  1316. X    IF(.NOT.CYCLOF .AND.(RVCYC.NE.0))
  1317. X&        CALL RSPEAK(193+IABS(RVCYC))
  1318. X    RETURN
  1319. XC
  1320. XC R26--    BANK BOX ROOM.
  1321. XC
  1322. X26000    IF(PRSA.NE.WALKIW) RETURN
  1323. XC                        !SURPRISE HIM.
  1324. X    DO 26100 I=1,8,2
  1325. XC                        !SCOLRM DEPENDS ON
  1326. X      IF(FROMDR.EQ.SCOLDR(I)) SCOLRM=SCOLDR(I+1)
  1327. X26100    CONTINUE
  1328. XC                        !ENTRY DIRECTION.
  1329. X    RETURN
  1330. XC
  1331. XC R27--    TREASURE ROOM.
  1332. XC
  1333. X27000    IF((PRSA.NE.WALKIW).OR. .NOT.THFACT)
  1334. X&        RETURN
  1335. X    IF(OROOM(THIEF).NE.HERE)
  1336. X&        CALL NEWSTA(THIEF,82,HERE,0,0)
  1337. X    THFPOS=HERE
  1338. XC                        !RESET SEARCH PATTERN.
  1339. X    OFLAG2(THIEF)=or(OFLAG2(THIEF),FITEBT)
  1340. X    IF(OROOM(CHALI).EQ.HERE)
  1341. X&        OFLAG1(CHALI)=and(OFLAG1(CHALI),not(TAKEBT))
  1342. XC
  1343. XC    VANISH EVERYTHING IN ROOM
  1344. XC
  1345. X    J=0
  1346. XC                        !ASSUME NOTHING TO VANISH.
  1347. X    DO 27200 I=1,OLNT
  1348. X      IF((I.EQ.CHALI).OR.(I.EQ.THIEF).OR..NOT.QHERE(I,HERE))
  1349. X&        GO TO 27200
  1350. X      J=83
  1351. XC                        !FLAG BYEBYE.
  1352. X      OFLAG1(I)=and(OFLAG1(I),not(VISIBT))
  1353. X27200    CONTINUE
  1354. X    CALL RSPEAK(J)
  1355. XC                        !DESCRIBE.
  1356. X    RETURN
  1357. XC
  1358. XC R28--    CLIFF FUNCTION.  SEE IF CARRYING INFLATED BOAT.
  1359. XC
  1360. X28000    DEFLAF=OADV(RBOAT).NE.WINNER
  1361. XC                        !TRUE IF NOT CARRYING.
  1362. X    RETURN
  1363. XC RAPPL1, PAGE 9
  1364. XC
  1365. XC R29--    RIVR4 ROOM.  PLAY WITH BUOY.
  1366. XC
  1367. X29000    IF(.NOT.BUOYF.OR.(OADV(BUOY).NE.WINNER)) RETURN
  1368. X    CALL RSPEAK(84)
  1369. XC                        !GIVE HINT,
  1370. X    BUOYF=.FALSE.
  1371. XC                        !THEN DISABLE.
  1372. X    RETURN
  1373. XC
  1374. XC R30--    OVERFALLS.  DOOM.
  1375. XC
  1376. X30000    IF(PRSA.NE.LOOKW) CALL JIGSUP(85)
  1377. XC                        !OVER YOU GO.
  1378. X    RETURN
  1379. XC
  1380. XC R31--    BEACH ROOM.  DIG A HOLE.
  1381. XC
  1382. X31000    IF((PRSA.NE.DIGW).OR.(PRSO.NE.SHOVE)) RETURN
  1383. X    RVSND=RVSND+1
  1384. XC                        !INCREMENT DIG STATE.
  1385. X    GO TO (31100,31100,31100,31400,31500),RVSND
  1386. XC                        !PROCESS STATE.
  1387. X    CALL BUG(2,RVSND)
  1388. XC
  1389. X31100    CALL RSPEAK(85+RVSND)
  1390. XC                        !1-3... DISCOURAGE HIM.
  1391. X    RETURN
  1392. XC
  1393. X31400    I=89
  1394. XC                        !ASSUME DISCOVERY.
  1395. X    IF(and(OFLAG1(STATU),VISIBT).NE.0) I=88
  1396. X    CALL RSPEAK(I)
  1397. X    OFLAG1(STATU)=or(OFLAG1(STATU),VISIBT)
  1398. X    RETURN
  1399. XC
  1400. X31500    RVSND=0
  1401. XC                        !5... SAND COLLAPSES
  1402. X    CALL JIGSUP(90)
  1403. XC                        !AND SO DOES HE.
  1404. X    RETURN
  1405. XC
  1406. XC R32--    TCAVE ROOM.  DIG A HOLE IN GUANO.
  1407. XC
  1408. X32000    IF((PRSA.NE.DIGW).OR.(PRSO.NE.SHOVE)) RETURN
  1409. X    I=91
  1410. XC                        !ASSUME NO GUANO.
  1411. X    IF(.NOT. QHERE(GUANO,HERE)) GO TO 32100
  1412. XC                        !IS IT HERE?
  1413. X    RVGUA=MIN0(4,RVGUA+1)
  1414. XC                        !YES, SET NEW STATE.
  1415. X    I=91+RVGUA
  1416. XC                        !GET NASTY REMARK.
  1417. X32100    CALL RSPEAK(I)
  1418. XC                        !DESCRIBE.
  1419. X    RETURN
  1420. XC
  1421. XC R33--    FALLS ROOM
  1422. XC
  1423. X33000    IF(PRSA.NE.LOOKW) RETURN
  1424. XC                        !LOOK?
  1425. X    CALL RSPEAK(96)
  1426. XC                        !DESCRIBE.
  1427. X    I=97
  1428. XC                        !ASSUME NO RAINBOW.
  1429. X    IF(RAINBF) I=98
  1430. XC                        !GOT ONE?
  1431. X    CALL RSPEAK(I)
  1432. XC                        !DESCRIBE.
  1433. X    RETURN
  1434. XC RAPPL1, PAGE 10
  1435. XC
  1436. XC R34--    LEDGE FUNCTION.  LEDGE CAN COLLAPSE.
  1437. XC
  1438. X34000    IF(PRSA.NE.LOOKW) RETURN
  1439. XC                        !LOOK?
  1440. X    CALL RSPEAK(100)
  1441. XC                        !DESCRIBE.
  1442. X    I=102
  1443. XC                        !ASSUME SAFE ROOM OK.
  1444. X    IF(and(RFLAG(MSAFE),RMUNG).NE.0) I=101
  1445. X    CALL RSPEAK(I)
  1446. XC                        !DESCRIBE.
  1447. X    RETURN
  1448. XC
  1449. XC R35--    SAFE ROOM.  STATE DEPENDS ON WHETHER SAFE BLOWN.
  1450. XC
  1451. X35000    IF(PRSA.NE.LOOKW) RETURN
  1452. XC                        !LOOK?
  1453. X    CALL RSPEAK(104)
  1454. XC                        !DESCRIBE.
  1455. X    I=105
  1456. XC                        !ASSUME OK.
  1457. X    IF(SAFEF) I=106
  1458. XC                        !BLOWN?
  1459. X    CALL RSPEAK(I)
  1460. XC                        !DESCRIBE.
  1461. X    RETURN
  1462. XC
  1463. XC R36--    MAGNET ROOM.  DESCRIBE, CHECK FOR SPINDIZZY DOOM.
  1464. XC
  1465. X36000    IF(PRSA.NE.LOOKW) GO TO 36500
  1466. XC                        !LOOK?
  1467. X    CALL RSPEAK(107)
  1468. XC                        !DESCRIBE.
  1469. X    RETURN
  1470. XC
  1471. X36500    IF((PRSA.NE.WALKIW).OR. .NOT.CAROFF) RETURN
  1472. XC                        !WALKIN ON FLIPPED?
  1473. X    IF(CAROZF) GO TO 36600
  1474. XC                        !ZOOM?
  1475. X    CALL RSPEAK(108)
  1476. XC                        !NO, SPIN HIS COMPASS.
  1477. X    RETURN
  1478. XC
  1479. X36600    I=58
  1480. XC                        !SPIN HIS INSIDES.
  1481. X    IF(WINNER.NE.PLAYER) I=99
  1482. XC                        !SPIN ROBOT.
  1483. X    CALL JIGSUP(I)
  1484. XC                        !DEAD.
  1485. X    RETURN
  1486. XC
  1487. XC R37--    CAGE ROOM.  IF SOLVED CAGE, MOVE TO OTHER CAGE ROOM.
  1488. XC
  1489. X37000    IF(CAGESF) F=MOVETO(CAGER,WINNER)
  1490. XC                        !IF SOLVED, MOVE.
  1491. X    RETURN
  1492. XC
  1493. X    END
  1494. END_OF_rooms.F
  1495. if test 13238 -ne `wc -c <rooms.F`; then
  1496.     echo shar: \"rooms.F\" unpacked with wrong size!
  1497. fi
  1498. # end of overwriting check
  1499. fi
  1500. if test -f sobjs.F -a "${1}" != "-c" ; then 
  1501.   echo shar: Will not over-write existing file \"sobjs.F\"
  1502. else
  1503. echo shar: Extracting \"sobjs.F\" \(13294 characters\)
  1504. sed "s/^X//" >sobjs.F <<'END_OF_sobjs.F'
  1505. XC SOBJS-    SIMPLE OBJECTS PROCESSOR
  1506. XC    OBJECTS IN THIS MODULE CANNOT CALL RMINFO, JIGSUP,
  1507. XC    MAJOR VERBS, OR OTHER NON-RESIDENT SUBROUTINES
  1508. XC
  1509. XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  1510. XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  1511. XC WRITTEN BY R. M. SUPNIK
  1512. XC
  1513. XC DECLARATIONS
  1514. XC
  1515. X    LOGICAL FUNCTION SOBJS(RI,ARG)
  1516. X    IMPLICIT INTEGER (A-Z)
  1517. X    LOGICAL QOPEN
  1518. X    LOGICAL MOVETO,OPNCLS,LIT
  1519. X    LOGICAL QHERE,F
  1520. X#include "parser.h"
  1521. X#include "gamestate.h"
  1522. X#include "state.h"
  1523. X#include "rooms.h"
  1524. X#include "rflag.h"
  1525. X#include "rindex.h"
  1526. X#include "objects.h"
  1527. X#include "oflags.h"
  1528. X#include "oindex.h"
  1529. X#include "clock.h"
  1530. X
  1531. X#include "villians.h"
  1532. X#include "advers.h"
  1533. X#include "verbs.h"
  1534. X#include "flags.h"
  1535. XC
  1536. XC FUNCTIONS AND DATA
  1537. XC
  1538. X    QOPEN(R)=and(OFLAG2(R),OPENBT).NE.0
  1539. XC SOBJS, PAGE 2
  1540. XC
  1541. X    IF(PRSO.GT.220) GO TO 5
  1542. X    IF(PRSO.NE.0) ODO2=ODESC2(PRSO)
  1543. X5    IF(PRSI.NE.0) ODI2=ODESC2(PRSI)
  1544. X    AV=AVEHIC(WINNER)
  1545. X    SOBJS=.TRUE.
  1546. XC
  1547. X    GO TO (1000,3000,4000,6000,7000,8000,9000,
  1548. X&     13000,14000,16000,17000,
  1549. X&     21000,23000,24000,27000,28000,29000,30000,
  1550. X&     31000,33000,34000,36000,37000,38000,
  1551. X&     41000,42000,43000,44000,46000,
  1552. X&     53000,56000)
  1553. X&        RI
  1554. X    CALL BUG(6,RI)
  1555. XC
  1556. XC RETURN HERE TO DECLARE FALSE RESULT
  1557. XC
  1558. X10    SOBJS=.FALSE.
  1559. X    RETURN
  1560. XC SOBJS, PAGE 3
  1561. XC
  1562. XC O1--    GUNK FUNCTION
  1563. XC
  1564. X1000    IF(OCAN(GUNK).EQ.0) GO TO 10
  1565. XC                        !NOT INSIDE? F
  1566. X    CALL NEWSTA(GUNK,122,0,0,0)
  1567. XC                        !FALLS APART.
  1568. X    RETURN
  1569. XC
  1570. XC O2--    TROPHY CASE
  1571. XC
  1572. X3000    IF(PRSA.NE.TAKEW) GO TO 10
  1573. XC                        !TAKE?
  1574. X    CALL RSPEAK(128)
  1575. XC                        !CANT.
  1576. X    RETURN
  1577. XC
  1578. XC O3--    BOTTLE FUNCTION
  1579. XC
  1580. X4000    IF(PRSA.NE.THROWW) GO TO 4100
  1581. XC                        !THROW?
  1582. X    CALL NEWSTA(PRSO,129,0,0,0)
  1583. XC                        !BREAKS.
  1584. X    RETURN
  1585. XC
  1586. X4100    IF(PRSA.NE.MUNGW) GO TO 10
  1587. XC                        !MUNG?
  1588. X    CALL NEWSTA(PRSO,131,0,0,0)
  1589. XC                        !BREAKS.
  1590. X    RETURN
  1591. XC SOBJS, PAGE 4
  1592. XC
  1593. XC O4--    ROPE FUNCTION
  1594. XC
  1595. X6000    IF(HERE.EQ.DOME) GO TO 6100
  1596. XC                        !IN DOME?
  1597. X    DOMEF=.FALSE.
  1598. XC                        !NO,
  1599. X    IF(PRSA.NE.UNTIEW) GO TO 6050
  1600. XC                        !UNTIE?
  1601. X    CALL RSPEAK(134)
  1602. XC                        !CANT
  1603. X    RETURN
  1604. XC
  1605. X6050    IF(PRSA.NE.TIEW) GO TO 10
  1606. XC                        !TIE?
  1607. X    CALL RSPEAK(135)
  1608. XC                        !CANT TIE
  1609. X    RETURN
  1610. XC
  1611. X6100    IF((PRSA.NE.TIEW).OR.(PRSI.NE.RAILI)) GO TO 6200
  1612. X    IF(DOMEF) GO TO 6150
  1613. XC                        !ALREADY TIED?
  1614. X    DOMEF=.TRUE.
  1615. XC                        !NO, TIE IT.
  1616. X    OFLAG1(ROPE)=or(OFLAG1(ROPE),NDSCBT)
  1617. X    OFLAG2(ROPE)=or(OFLAG2(ROPE),CLMBBT)
  1618. X    CALL NEWSTA(ROPE,137,DOME,0,0)
  1619. X    RETURN
  1620. XC
  1621. X6150    CALL RSPEAK(136)
  1622. XC                        !DUMMY.
  1623. X    RETURN
  1624. XC
  1625. X6200    IF(PRSA.NE.UNTIEW) GO TO 6300
  1626. XC                        !UNTIE?
  1627. X    IF(DOMEF) GO TO 6250
  1628. XC                        !TIED?
  1629. X    CALL RSPEAK(134)
  1630. XC                        !NO, DUMMY.
  1631. X    RETURN
  1632. XC
  1633. X6250    DOMEF=.FALSE.
  1634. XC                        !YES, UNTIE IT.
  1635. X    OFLAG1(ROPE)=and(OFLAG1(ROPE), not(NDSCBT))
  1636. X    OFLAG2(ROPE)=and(OFLAG2(ROPE), not(CLMBBT))
  1637. X    CALL RSPEAK(139)
  1638. X    RETURN
  1639. XC
  1640. X6300    IF(DOMEF.OR.(PRSA.NE.DROPW)) GO TO 6400
  1641. XC                        !DROP & UNTIED?
  1642. X    CALL NEWSTA(ROPE,140,MTORC,0,0)
  1643. XC                        !YES, DROP.
  1644. X    RETURN
  1645. XC
  1646. X6400    IF((PRSA.NE.TAKEW).OR. .NOT.DOMEF) GO TO 10
  1647. X    CALL RSPEAK(141)
  1648. XC                        !TAKE & TIED.
  1649. X    RETURN
  1650. XC
  1651. XC O5--    SWORD FUNCTION
  1652. XC
  1653. X7000    IF((PRSA.EQ.TAKEW).AND.(WINNER.EQ.PLAYER))
  1654. X&        SWDACT=.TRUE.
  1655. X    GO TO 10
  1656. XC
  1657. XC O6--    LANTERN
  1658. XC
  1659. X8000    IF(PRSA.NE.THROWW) GO TO 8100
  1660. XC                        !THROW?
  1661. X    CALL NEWSTA(LAMP,0,0,0,0)
  1662. XC                        !KILL LAMP,
  1663. X    CALL NEWSTA(BLAMP,142,HERE,0,0)
  1664. XC                        !REPLACE WITH BROKEN.
  1665. X    RETURN
  1666. XC
  1667. X8100    IF(PRSA.EQ.TRNONW) CFLAG(CEVLNT)=.TRUE.
  1668. X    IF(PRSA.EQ.TRNOFW) CFLAG(CEVLNT)=.FALSE.
  1669. X    GO TO 10
  1670. XC
  1671. XC O7--    RUG FUNCTION
  1672. XC
  1673. X9000    IF(PRSA.NE.RAISEW) GO TO 9100
  1674. XC                        !RAISE?
  1675. X    CALL RSPEAK(143)
  1676. XC                        !CANT
  1677. X    RETURN
  1678. XC
  1679. X9100    IF(PRSA.NE.TAKEW) GO TO 9200
  1680. XC                        !TAKE?
  1681. X    CALL RSPEAK(144)
  1682. XC                        !CANT
  1683. X    RETURN
  1684. XC
  1685. X9200    IF(PRSA.NE.MOVEW) GO TO 9300
  1686. XC                        !MOVE?
  1687. X    CALL RSPEAK(145+ORRUG)
  1688. X    ORRUG=1
  1689. X    OFLAG1(DOOR)=or(OFLAG1(DOOR),VISIBT)
  1690. X    RETURN
  1691. XC
  1692. X9300    IF((PRSA.NE.LOOKUW).OR.(ORRUG.NE.0).OR.
  1693. X&        QOPEN(DOOR)) GO TO 10
  1694. X    CALL RSPEAK(345)
  1695. X    RETURN
  1696. XC SOBJS, PAGE 5
  1697. XC
  1698. XC O8--    SKELETON
  1699. XC
  1700. X13000    I=ROBRM(HERE,100,LLD2,0,0)+ROBADV(WINNER,LLD2,0,0)
  1701. X    IF(I.NE.0) CALL RSPEAK(162)
  1702. XC                        !IF ROBBED, SAY SO.
  1703. X    RETURN
  1704. XC
  1705. XC O9--    MIRROR
  1706. XC
  1707. X14000    IF(MIRRMF.OR.(PRSA.NE.RUBW)) GO TO 14500
  1708. X    MROOM=xor(HERE,1)
  1709. X    DO 14100 I=1,OLNT
  1710. XC                        !INTERCHANGE OBJS.
  1711. X      IF(OROOM(I).EQ.HERE) OROOM(I)=-1
  1712. X      IF(OROOM(I).EQ.MROOM) OROOM(I)=HERE
  1713. X      IF(OROOM(I).EQ.-1) OROOM(I)=MROOM
  1714. X14100    CONTINUE
  1715. X    F=MOVETO(MROOM,WINNER)
  1716. X    CALL RSPEAK(163)
  1717. XC                        !SHAKE WORLD.
  1718. X    RETURN
  1719. XC
  1720. X14500    IF((PRSA.NE.LOOKW).AND.(PRSA.NE.LOOKIW).AND.
  1721. X&        (PRSA.NE.EXAMIW)) GO TO 14600
  1722. X    I=164
  1723. XC                        !MIRROR OK.
  1724. X    IF(MIRRMF) I=165
  1725. XC                        !MIRROR DEAD.
  1726. X    CALL RSPEAK(I)
  1727. X    RETURN
  1728. XC
  1729. X14600    IF(PRSA.NE.TAKEW) GO TO 14700
  1730. XC                        !TAKE?
  1731. X    CALL RSPEAK(166)
  1732. XC                        !JOKE.
  1733. X    RETURN
  1734. XC
  1735. X14700    IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
  1736. X    I=167
  1737. XC                        !MIRROR BREAKS.
  1738. X    IF(MIRRMF) I=168
  1739. XC                        !MIRROR ALREADY BROKEN.
  1740. X    MIRRMF=.TRUE.
  1741. X    BADLKF=.TRUE.
  1742. X    CALL RSPEAK(I)
  1743. X    RETURN
  1744. XC SOBJS, PAGE 6
  1745. XC
  1746. XC O10--    DUMBWAITER
  1747. XC
  1748. X16000    IF(PRSA.NE.RAISEW) GO TO 16100
  1749. XC                        !RAISE?
  1750. X    IF(CAGETF) GO TO 16400
  1751. XC                        !ALREADY AT TOP?
  1752. X    CALL NEWSTA(TBASK,175,TSHAF,0,0)
  1753. XC                        !NO, RAISE BASKET.
  1754. X    CALL NEWSTA(FBASK,0,BSHAF,0,0)
  1755. X    CAGETF=.TRUE.
  1756. XC                        !AT TOP.
  1757. X    RETURN
  1758. XC
  1759. X16100    IF(PRSA.NE.LOWERW) GO TO 16200
  1760. XC                        !LOWER?
  1761. X    IF(.NOT.CAGETF) GO TO 16400
  1762. XC                        !ALREADY AT BOTTOM?
  1763. X    CALL NEWSTA(TBASK,176,BSHAF,0,0)
  1764. XC                        !NO, LOWER BASKET.
  1765. X    CALL NEWSTA(FBASK,0,TSHAF,0,0)
  1766. X    CAGETF=.FALSE.
  1767. X    IF(.NOT.LIT(HERE)) CALL RSPEAK(406)
  1768. XC                        !IF DARK, DIE.
  1769. X    RETURN
  1770. XC
  1771. X16200    IF((PRSO.NE.FBASK).AND.(PRSI.NE.FBASK)) GO TO 16300
  1772. X    CALL RSPEAK(130)
  1773. XC                        !WRONG BASKET.
  1774. X    RETURN
  1775. XC
  1776. X16300    IF(PRSA.NE.TAKEW) GO TO 10
  1777. XC                        !TAKE?
  1778. X    CALL RSPEAK(177)
  1779. XC                        !JOKE.
  1780. X    RETURN
  1781. XC
  1782. X16400    CALL RSPEAK(125+RND(3))
  1783. XC                        !DUMMY.
  1784. X    RETURN
  1785. XC
  1786. XC O11--    GHOST FUNCTION
  1787. XC
  1788. X17000    I=178
  1789. XC                        !ASSUME DIRECT.
  1790. X    IF(PRSO.NE.GHOST) I=179
  1791. XC                        !IF NOT, INDIRECT.
  1792. X    CALL RSPEAK(I)
  1793. X    RETURN
  1794. XC                        !SPEAK AND EXIT.
  1795. XC SOBJS, PAGE 7
  1796. XC
  1797. XC O12--    TUBE
  1798. XC
  1799. X21000    IF((PRSA.NE.PUTW).OR.(PRSI.NE.TUBE)) GO TO 10
  1800. X    CALL RSPEAK(186)
  1801. XC                        !CANT PUT BACK IN.
  1802. X    RETURN
  1803. XC
  1804. XC O13--    CHALICE
  1805. XC
  1806. X23000    IF((PRSA.NE.TAKEW).OR.(OCAN(PRSO).NE.0).OR.
  1807. X&        (OROOM(PRSO).NE.TREAS).OR.(OROOM(THIEF).NE.TREAS).OR.
  1808. X&        (and(OFLAG2(THIEF),FITEBT).EQ.0).OR.
  1809. X&        .NOT. THFACT) GO TO 10
  1810. X    CALL RSPEAK(204)
  1811. XC                        !CANT TAKE.
  1812. X    RETURN
  1813. XC
  1814. XC O14--    PAINTING
  1815. XC
  1816. X24000    IF(PRSA.NE.MUNGW) GO TO 10
  1817. XC                        !MUNG?
  1818. X    CALL RSPEAK(205)
  1819. XC                        !DESTROY PAINTING.
  1820. X    OFVAL(PRSO)=0
  1821. X    OTVAL(PRSO)=0
  1822. X    ODESC1(PRSO)=207
  1823. X    ODESC2(PRSO)=206
  1824. X    RETURN
  1825. XC SOBJS, PAGE 8
  1826. XC
  1827. XC O15--    BOLT
  1828. XC
  1829. X27000    IF(PRSA.NE.TURNW) GO TO 10
  1830. XC                        !TURN BOLT?
  1831. X    IF(PRSI.NE.WRENC) GO TO 27500
  1832. XC                        !WITH WRENCH?
  1833. X    IF(GATEF) GO TO 27100
  1834. XC                        !PROPER BUTTON PUSHED?
  1835. X    CALL RSPEAK(210)
  1836. XC                        !NO, LOSE.
  1837. X    RETURN
  1838. XC
  1839. X27100    IF(LWTIDF) GO TO 27200
  1840. XC                        !LOW TIDE NOW?
  1841. X    LWTIDF=.TRUE.
  1842. XC                        !NO, EMPTY DAM.
  1843. X    CALL RSPEAK(211)
  1844. X    OFLAG2(COFFI)=and(OFLAG2(COFFI), not(SCRDBT))
  1845. X    OFLAG1(TRUNK)=or(OFLAG1(TRUNK),VISIBT)
  1846. X    RFLAG(RESER)=and(or(RFLAG(RESER),RLAND)
  1847. X&        ,not(RWATER+RSEEN))
  1848. X    RETURN
  1849. XC
  1850. X27200    LWTIDF=.FALSE.
  1851. XC                        !YES, FILL DAM.
  1852. X    CALL RSPEAK(212)
  1853. X    IF(QHERE(TRUNK,RESER))
  1854. X&        OFLAG1(TRUNK)=and(OFLAG1(TRUNK), not(VISIBT))
  1855. X    RFLAG(RESER)=and(or(RFLAG(RESER),RWATER) ,not(RLAND))
  1856. X    RETURN
  1857. XC
  1858. X27500    CALL RSPSUB(299,ODI2)
  1859. XC                        !NOT WITH THAT.
  1860. X    RETURN
  1861. XC
  1862. XC O16--    GRATING
  1863. XC
  1864. X28000    IF((PRSA.NE.OPENW).AND.(PRSA.NE.CLOSEW)) GO TO 10
  1865. X    IF(GRUNLF) GO TO 28200
  1866. XC                        !UNLOCKED?
  1867. X    CALL RSPEAK(214)
  1868. XC                        !NO, LOCKED.
  1869. X    RETURN
  1870. XC
  1871. X28200    I=215
  1872. XC                        !UNLOCKED, VIEW FRM CLR.
  1873. X    IF(HERE.NE.CLEAR) I=216
  1874. XC                        !VIEW FROM BELOW.
  1875. X    SOBJS=OPNCLS(GRATE,I,885)
  1876. XC                        !OPEN/CLOSE.
  1877. X    RFLAG(MGRAT)=and(RFLAG(MGRAT), not(RLIGHT))
  1878. X    IF(QOPEN(GRATE)) RFLAG(MGRAT)=or(RFLAG(MGRAT),RLIGHT)
  1879. X    IF(.NOT.LIT(HERE)) CALL RSPEAK(406)
  1880. XC                        !IF DARK, DIE.
  1881. X    RETURN
  1882. XC
  1883. XC O17--    TRAP DOOR
  1884. XC
  1885. X29000    IF(HERE.NE.LROOM) GO TO 29100
  1886. XC                        !FROM LIVING ROOM?
  1887. X    SOBJS=OPNCLS(DOOR,218,219)
  1888. XC                        !OPEN/CLOSE.
  1889. X    RETURN
  1890. XC
  1891. X29100    IF(HERE.NE.CELLA) GO TO 10
  1892. XC                        !FROM CELLAR?
  1893. X    IF((PRSA.NE.OPENW).OR.QOPEN(DOOR)) GO TO 29200
  1894. X    CALL RSPEAK(220)
  1895. XC                        !CANT OPEN CLOSED DOOR.
  1896. X    RETURN
  1897. XC
  1898. X29200    SOBJS=OPNCLS(DOOR,0,22)
  1899. XC                        !NORMAL OPEN/CLOSE.
  1900. X    RETURN
  1901. XC
  1902. XC O18--    DURABLE DOOR
  1903. XC
  1904. X30000    I=0
  1905. XC                        !ASSUME NO APPL.
  1906. X    IF(PRSA.EQ.OPENW) I=221
  1907. XC                        !OPEN?
  1908. X    IF(PRSA.EQ.BURNW) I=222
  1909. XC                        !BURN?
  1910. X    IF(PRSA.EQ.MUNGW) I=223+RND(3)
  1911. XC                        !MUNG?
  1912. X    IF(I.EQ.0) GO TO 10
  1913. X    CALL RSPEAK(I)
  1914. X    RETURN
  1915. XC
  1916. XC O19--    MASTER SWITCH
  1917. XC
  1918. X31000    IF(PRSA.NE.TURNW) GO TO 10
  1919. XC                        !TURN?
  1920. X    IF(PRSI.NE.SCREW) GO TO 31500
  1921. XC                        !WITH SCREWDRIVER?
  1922. X    IF(QOPEN(MACHI)) GO TO 31600
  1923. XC                        !LID UP?
  1924. X    CALL RSPEAK(226)
  1925. XC                        !NO, ACTIVATE.
  1926. X    IF(OCAN(COAL).NE.MACHI) GO TO 31400
  1927. XC                        !COAL INSIDE?
  1928. X    CALL NEWSTA(COAL,0,0,0,0)
  1929. XC                        !KILL COAL,
  1930. X    CALL NEWSTA(DIAMO,0,0,MACHI,0)
  1931. XC                        !REPLACE WITH DIAMOND.
  1932. X    RETURN
  1933. XC
  1934. X31400    DO 31450 I=1,OLNT
  1935. XC                        !KILL NONCOAL OBJECTS.
  1936. X      IF(OCAN(I).NE.MACHI) GO TO 31450
  1937. XC                        !INSIDE MACHINE?
  1938. X      CALL NEWSTA(I,0,0,0,0)
  1939. XC                        !KILL OBJECT AND CONTENTS.
  1940. X      CALL NEWSTA(GUNK,0,0,MACHI,0)
  1941. XC                        !REDUCE TO GUNK.
  1942. X31450    CONTINUE
  1943. X    RETURN
  1944. XC
  1945. X31500    CALL RSPSUB(300,ODI2)
  1946. XC                        !CANT TURN WITH THAT.
  1947. X    RETURN
  1948. XC
  1949. X31600    CALL RSPEAK(227)
  1950. XC                        !LID IS UP.
  1951. X    RETURN
  1952. XC SOBJS, PAGE 9
  1953. XC
  1954. XC O20--    LEAK
  1955. XC
  1956. X33000    IF((PRSO.NE.LEAK).OR.(PRSA.NE.PLUGW).OR.(RVMNT.LE.0))
  1957. X&        GO TO 10
  1958. X    IF(PRSI.NE.PUTTY) GO TO 33100
  1959. XC                        !WITH PUTTY?
  1960. X    RVMNT=-1
  1961. XC                        !DISABLE LEAK.
  1962. X    CTICK(CEVMNT)=0
  1963. X    CALL RSPEAK(577)
  1964. X    RETURN
  1965. XC
  1966. X33100    CALL RSPSUB(301,ODI2)
  1967. XC                        !CANT WITH THAT.
  1968. X    RETURN
  1969. XC
  1970. XC O21--    DROWNING BUTTONS
  1971. XC
  1972. X34000    IF(PRSA.NE.PUSHW) GO TO 10
  1973. XC                        !PUSH?
  1974. X    GO TO (34100,34200,34300,34400),(PRSO-RBUTT+1)
  1975. X    GO TO 10
  1976. XC                        !NOT A BUTTON.
  1977. XC
  1978. X34100    RFLAG(HERE)=xor(RFLAG(HERE),RLIGHT)
  1979. X    I=230
  1980. X    IF(and(RFLAG(HERE),RLIGHT).NE.0) I=231
  1981. X    CALL RSPEAK(I)
  1982. X    RETURN
  1983. XC
  1984. X34200    GATEF=.TRUE.
  1985. XC                        !RELEASE GATE.
  1986. X    CALL RSPEAK(232)
  1987. X    RETURN
  1988. XC
  1989. X34300    GATEF=.FALSE.
  1990. XC                        !INTERLOCK GATE.
  1991. X    CALL RSPEAK(232)
  1992. X    RETURN
  1993. XC
  1994. X34400    IF(RVMNT.NE.0) GO TO 34500
  1995. XC                        !LEAK ALREADY STARTED?
  1996. X    CALL RSPEAK(233)
  1997. XC                        !NO, START LEAK.
  1998. X    RVMNT=1
  1999. X    CTICK(CEVMNT)=-1
  2000. X    RETURN
  2001. XC
  2002. X34500    CALL RSPEAK(234)
  2003. XC                        !BUTTON JAMMED.
  2004. X    RETURN
  2005. XC
  2006. XC O22--    INFLATABLE BOAT
  2007. XC
  2008. X36000    IF(PRSA.NE.INFLAW) GO TO 10
  2009. XC                        !INFLATE?
  2010. X    IF(OROOM(IBOAT).NE.0) GO TO 36100
  2011. XC                        !IN ROOM?
  2012. X    CALL RSPEAK(235)
  2013. XC                        !NO, JOKE.
  2014. X    RETURN
  2015. XC
  2016. X36100    IF(PRSI.NE.PUMP) GO TO 36200
  2017. XC                        !WITH PUMP?
  2018. X    CALL NEWSTA(IBOAT,0,0,0,0)
  2019. XC                        !KILL DEFL BOAT,
  2020. X    CALL NEWSTA(RBOAT,236,HERE,0,0)
  2021. XC                        !REPL WITH INF.
  2022. X    DEFLAF=.FALSE.
  2023. X    RETURN
  2024. XC
  2025. X36200    I=237
  2026. XC                        !JOKES.
  2027. X    IF(PRSI.NE.LUNGS) I=303
  2028. X    CALL RSPSUB(I,ODI2)
  2029. X    RETURN
  2030. XC
  2031. XC O23--    DEFLATED BOAT
  2032. XC
  2033. X37000    IF(PRSA.NE.INFLAW) GO TO 37100
  2034. XC                        !INFLATE?
  2035. X    CALL RSPEAK(238)
  2036. XC                        !JOKE.
  2037. X    RETURN
  2038. XC
  2039. X37100    IF(PRSA.NE.PLUGW) GO TO 10
  2040. XC                        !PLUG?
  2041. X    IF(PRSI.NE.PUTTY) GO TO 33100
  2042. XC                        !WITH PUTTY?
  2043. X    CALL NEWSTA(IBOAT,239,OROOM(DBOAT),OCAN(DBOAT),OADV(DBOAT))
  2044. X    CALL NEWSTA(DBOAT,0,0,0,0)
  2045. XC                        !KILL DEFL BOAT, REPL.
  2046. X    RETURN
  2047. XC SOBJS, PAGE 10
  2048. XC
  2049. XC O24--    RUBBER BOAT
  2050. XC
  2051. X38000    IF(ARG.NE.0) GO TO 10
  2052. XC                        !DISMISS READIN, OUT.
  2053. X    IF((PRSA.NE.BOARDW).OR.(OADV(STICK).NE.WINNER)) GO TO 38100
  2054. X    CALL NEWSTA(RBOAT,0,0,0,0)
  2055. XC                        !KILL INFL BOAT,
  2056. X    CALL NEWSTA(DBOAT,240,HERE,0,0)
  2057. XC                        !REPL WITH DEAD.
  2058. X    DEFLAF=.TRUE.
  2059. X    RETURN
  2060. XC
  2061. X38100    IF(PRSA.NE.INFLAW) GO TO 38200
  2062. XC                        !INFLATE?
  2063. X    CALL RSPEAK(367)
  2064. XC                        !YES, JOKE.
  2065. X    RETURN
  2066. XC
  2067. X38200    IF(PRSA.NE.DEFLAW) GO TO 10
  2068. XC                        !DEFLATE?
  2069. X    IF(AV.EQ.RBOAT) GO TO 38300
  2070. XC                        !IN BOAT?
  2071. X    IF(OROOM(RBOAT).EQ.0) GO TO 38400
  2072. XC                        !ON GROUND?
  2073. X    CALL NEWSTA(RBOAT,0,0,0,0)
  2074. XC                        !KILL INFL BOAT,
  2075. X    CALL NEWSTA(IBOAT,241,HERE,0,0)
  2076. XC                        !REPL WITH DEFL.
  2077. X    DEFLAF=.TRUE.
  2078. X    RETURN
  2079. XC
  2080. X38300    CALL RSPEAK(242)
  2081. XC                        !IN BOAT.
  2082. X    RETURN
  2083. XC
  2084. X38400    CALL RSPEAK(243)
  2085. XC                        !NOT ON GROUND.
  2086. X    RETURN
  2087. XC
  2088. XC O25--    BRAIDED ROPE
  2089. XC
  2090. X41000    IF((PRSA.NE.TIEW).OR.(PRSO.NE.BROPE).OR.
  2091. X&        ((PRSI.NE.HOOK1).AND.(PRSI.NE.HOOK2)))
  2092. X&        GO TO 41500
  2093. X    BTIEF=PRSI
  2094. XC                        !RECORD LOCATION.
  2095. X    CFLAG(CEVBAL)=.FALSE.
  2096. XC                        !STALL ASCENT.
  2097. X    CALL RSPEAK(248)
  2098. X    RETURN
  2099. XC
  2100. X41500    IF((PRSA.NE.UNTIEW).OR.(PRSO.NE.BROPE)) GO TO 10
  2101. X    IF(BTIEF.NE.0) GO TO 41600
  2102. XC                        !TIED UP?
  2103. X    CALL RSPEAK(249)
  2104. XC                        !NO, JOKE.
  2105. X    RETURN
  2106. XC
  2107. X41600    CALL RSPEAK(250)
  2108. X    BTIEF=0
  2109. XC                        !UNTIE.
  2110. X    CTICK(CEVBAL)=3
  2111. XC                        !RESTART CLOCK.
  2112. X    CFLAG(CEVBAL)=.TRUE.
  2113. X    RETURN
  2114. XC
  2115. XC O26--    SAFE
  2116. XC
  2117. X42000    I=0
  2118. XC                        !ASSUME UNPROCESSED.
  2119. X    IF(PRSA.EQ.TAKEW) I=251
  2120. XC                        !TAKE?
  2121. X    IF((PRSA.EQ.OPENW).AND.SAFEF) I=253
  2122. XC                        !OPEN AFTER BLAST?
  2123. X    IF((PRSA.EQ.OPENW).AND..NOT.SAFEF) I=254
  2124. XC                        !OPEN BEFORE BLAST?
  2125. X    IF((PRSA.EQ.CLOSEW).AND.SAFEF) I=253
  2126. XC                        !CLOSE AFTER?
  2127. X    IF((PRSA.EQ.CLOSEW).AND..NOT.SAFEF) I=255
  2128. X    IF(I.EQ.0) GO TO 10
  2129. X    CALL RSPEAK(I)
  2130. X    RETURN
  2131. XC
  2132. XC O27--    FUSE
  2133. XC
  2134. X43000    IF(PRSA.NE.BURNW) GO TO 10
  2135. XC                        !BURN?
  2136. X    CALL RSPEAK(256)
  2137. X    CTICK(CEVFUS)=2
  2138. XC                        !START COUNTDOWN.
  2139. X    RETURN
  2140. XC
  2141. XC O28--    GNOME
  2142. XC
  2143. X44000    IF((PRSA.NE.GIVEW).AND.(PRSA.NE.THROWW)) GO TO 44500
  2144. X    IF(OTVAL(PRSO).EQ.0) GO TO 44100
  2145. XC                        !TREASURE?
  2146. X    CALL RSPSUB(257,ODO2)
  2147. XC                        !YES, GET DOOR.
  2148. X    CALL NEWSTA(PRSO,0,0,0,0)
  2149. X    CALL NEWSTA(GNOME,0,0,0,0)
  2150. XC                        !VANISH GNOME.
  2151. X    GNODRF=.TRUE.
  2152. X    RETURN
  2153. XC
  2154. X44100    CALL RSPSUB(258,ODO2)
  2155. XC                        !NO, LOSE OBJECT.
  2156. X    CALL NEWSTA(PRSO,0,0,0,0)
  2157. X    RETURN
  2158. XC
  2159. X44500    CALL RSPEAK(259)
  2160. XC                        !NERVOUS GNOME.
  2161. X    IF(.NOT.GNOMEF) CTICK(CEVGNO)=5
  2162. XC                        !SCHEDULE BYEBYE.
  2163. X    GNOMEF=.TRUE.
  2164. X    RETURN
  2165. XC
  2166. XC O29--    COKE BOTTLES
  2167. XC
  2168. X46000    IF((PRSA.NE.THROWW).AND.(PRSA.NE.MUNGW)) GO TO 10
  2169. X    CALL NEWSTA(PRSO,262,0,0,0)
  2170. XC                        !MUNG BOTTLES.
  2171. X    RETURN
  2172. XC SOBJS, PAGE 11
  2173. XC
  2174. XC
  2175. XC O30--    ROBOT
  2176. XC
  2177. X53000    IF(PRSA.NE.GIVEW) GO TO 53200
  2178. XC                        !GIVE?
  2179. X    CALL NEWSTA(PRSO,0,0,0,AROBOT)
  2180. XC                        !PUT ON ROBOT.
  2181. X    CALL RSPSUB(302,ODO2)
  2182. X    RETURN
  2183. XC
  2184. X53200    IF((PRSA.NE.MUNGW).AND.(PRSA.NE.THROWW)) GO TO 10
  2185. X    CALL NEWSTA(ROBOT,285,0,0,0)
  2186. XC                        !KILL ROBOT.
  2187. X    RETURN
  2188. XC
  2189. XC O31--    GRUE
  2190. XC
  2191. X56000    IF(PRSA.NE.EXAMIW) GO TO 56100
  2192. XC                        !EXAMINE?
  2193. X    CALL RSPEAK(288)
  2194. X    RETURN
  2195. XC
  2196. X56100    IF(PRSA.NE.FINDW) GO TO 10
  2197. XC                        !FIND?
  2198. X    CALL RSPEAK(289)
  2199. X    RETURN
  2200. XC
  2201. X    END
  2202. END_OF_sobjs.F
  2203. if test 13294 -ne `wc -c <sobjs.F`; then
  2204.     echo shar: \"sobjs.F\" unpacked with wrong size!
  2205. fi
  2206. # end of overwriting check
  2207. fi
  2208. if test -f verbs.h -a "${1}" != "-c" ; then 
  2209.   echo shar: Will not over-write existing file \"verbs.h\"
  2210. else
  2211. echo shar: Extracting \"verbs.h\" \(679 characters\)
  2212. sed "s/^X//" >verbs.h <<'END_OF_verbs.h'
  2213. XC
  2214. XC VERBS
  2215. XC
  2216. X    COMMON /VINDEX/ CINTW,DEADXW,FRSTQW,INXW,OUTXW
  2217. X    COMMON /VINDEX/ WALKIW,FIGHTW,FOOW
  2218. X    COMMON /VINDEX/ MELTW,READW,INFLAW,DEFLAW,ALARMW,EXORCW
  2219. X    COMMON /VINDEX/ PLUGW,KICKW,WAVEW,RAISEW,LOWERW,RUBW
  2220. X    COMMON /VINDEX/ PUSHW,UNTIEW,TIEW,TIEUPW,TURNW,BREATW
  2221. X    COMMON /VINDEX/ KNOCKW,LOOKW,EXAMIW,SHAKEW,MOVEW,TRNONW,TRNOFW
  2222. X    COMMON /VINDEX/ OPENW,CLOSEW,FINDW,WAITW,SPINW,BOARDW,UNBOAW,TAKEW
  2223. X    COMMON /VINDEX/ INVENW,FILLW,EATW,DRINKW,BURNW
  2224. X    COMMON /VINDEX/ MUNGW,KILLW,ATTACW,SWINGW
  2225. X    COMMON /VINDEX/ WALKW,TELLW,PUTW,DROPW,GIVEW,POURW,THROWW
  2226. X    COMMON /VINDEX/ DIGW,LEAPW,STAYW,FOLLOW
  2227. X    COMMON /VINDEX/ HELLOW,LOOKIW,LOOKUW,PUMPW,WINDW
  2228. X    COMMON /VINDEX/ CLMBW,CLMBUW,CLMBDW,TRNTOW
  2229. END_OF_verbs.h
  2230. if test 679 -ne `wc -c <verbs.h`; then
  2231.     echo shar: \"verbs.h\" unpacked with wrong size!
  2232. fi
  2233. # end of overwriting check
  2234. fi
  2235. if test -f villns.F -a "${1}" != "-c" ; then 
  2236.   echo shar: Will not over-write existing file \"villns.F\"
  2237. else
  2238. echo shar: Extracting \"villns.F\" \(7657 characters\)
  2239. sed "s/^X//" >villns.F <<'END_OF_villns.F'
  2240. XC TROLLP-    TROLL FUNCTION
  2241. XC
  2242. XC COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  2243. XC ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  2244. XC WRITTEN BY R. M. SUPNIK
  2245. XC
  2246. XC DECLARATIONS
  2247. XC
  2248. X    LOGICAL FUNCTION TROLLP(ARG)
  2249. X    IMPLICIT INTEGER (A-Z)
  2250. X    LOGICAL QHERE,PROB
  2251. X#include "parser.h"
  2252. X#include "gamestate.h"
  2253. X#include "objects.h"
  2254. X#include "oflags.h"
  2255. X#include "oindex.h"
  2256. X#include "verbs.h"
  2257. X#include "flags.h"
  2258. XC TROLLP, PAGE 2
  2259. XC
  2260. X    TROLLP=.TRUE.
  2261. XC                        !ASSUME WINS.
  2262. X    IF(PRSA.NE.FIGHTW) GO TO 1100
  2263. XC                        !FIGHT?
  2264. X    IF(OCAN(AXE).EQ.TROLL) GO TO 10
  2265. XC                        !GOT AXE?  NOTHING.
  2266. X    I=433
  2267. XC                        !ASSUME CANT GET.
  2268. X    IF(.NOT.QHERE(AXE,HERE)) GO TO 1050
  2269. XC                        !HERE?
  2270. X    I=434
  2271. XC                        !YES, RECOVER.
  2272. X    CALL NEWSTA(AXE,0,0,TROLL,0)
  2273. X1050    IF(QHERE(TROLL,HERE)) CALL RSPEAK(I)
  2274. XC                        !IF PLAYER HERE.
  2275. X    RETURN
  2276. XC
  2277. X1100    IF(PRSA.NE.DEADXW) GO TO 1200
  2278. XC                        !DEAD?
  2279. X    TROLLF=.TRUE.
  2280. XC                        !PERMIT EXITS.
  2281. X    RETURN
  2282. XC
  2283. X1200    IF(PRSA.NE.OUTXW) GO TO 1300
  2284. XC                        !OUT?
  2285. X    TROLLF=.TRUE.
  2286. XC                        !PERMIT EXITS.
  2287. X    OFLAG1(AXE)=and(OFLAG1(AXE), not(VISIBT))
  2288. X    ODESC1(TROLL)=435
  2289. XC                        !TROLL OUT.
  2290. X    RETURN
  2291. XC
  2292. X1300    IF(PRSA.NE.INXW) GO TO 1400
  2293. XC                        !WAKE UP?
  2294. X    TROLLF=.FALSE.
  2295. XC                        !FORBID EXITS.
  2296. X    OFLAG1(AXE)=or(OFLAG1(AXE),VISIBT)
  2297. X    ODESC1(TROLL)=436
  2298. XC                        !TROLL IN.
  2299. X    IF(QHERE(TROLL,HERE)) CALL RSPEAK(437)
  2300. X    RETURN
  2301. XC
  2302. X1400    IF(PRSA.NE.FRSTQW) GO TO 1500
  2303. XC                        !FIRST ENCOUNTER?
  2304. X    TROLLP=PROB(33,66)
  2305. XC                        !33% TRUE UNLESS BADLK.
  2306. X    RETURN
  2307. XC
  2308. X1500    IF((PRSA.NE.MOVEW).AND.(PRSA.NE.TAKEW).AND.(PRSA.NE.MUNGW)
  2309. X&        .AND.(PRSA.NE.THROWW).AND.(PRSA.NE.GIVEW)) GO TO 2000
  2310. X    IF(OCAPAC(TROLL).GE.0) GO TO 1550
  2311. XC                        !TROLL OUT?
  2312. X    OCAPAC(TROLL)=-OCAPAC(TROLL)
  2313. XC                        !YES, WAKE HIM.
  2314. X    OFLAG1(AXE)=or(OFLAG1(AXE),VISIBT)
  2315. X    TROLLF=.FALSE.
  2316. X    ODESC1(TROLL)=436
  2317. X    CALL RSPEAK(437)
  2318. XC
  2319. X1550    IF((PRSA.NE.TAKEW).AND.(PRSA.NE.MOVEW)) GO TO 1600
  2320. X    CALL RSPEAK(438)
  2321. XC                        !JOKE.
  2322. X    RETURN
  2323. XC
  2324. X1600    IF(PRSA.NE.MUNGW) GO TO 1700
  2325. XC                        !MUNG?
  2326. X    CALL RSPEAK(439)
  2327. XC                        !JOKE.
  2328. X    RETURN
  2329. XC
  2330. X1700    IF(PRSO.EQ.0) GO TO 10
  2331. XC                        !NO OBJECT?
  2332. X    I=440
  2333. XC                        !ASSUME THROW.
  2334. X    IF(PRSA.EQ.GIVEW) I=441
  2335. XC                        !GIVE?
  2336. X    CALL RSPSUB(I,ODESC2(PRSO))
  2337. XC                        !TROLL TAKES.
  2338. X    IF(PRSO.EQ.KNIFE) GO TO 1900
  2339. XC                        !OBJ KNIFE?
  2340. X    CALL NEWSTA(PRSO,442,0,0,0)
  2341. XC                        !NO, EATS IT.
  2342. X    RETURN
  2343. XC
  2344. X1900    CALL RSPEAK(443)
  2345. XC                        !KNIFE, THROWS IT BACK
  2346. X    OFLAG2(TROLL)=or(OFLAG2(TROLL),FITEBT)
  2347. X    RETURN
  2348. XC
  2349. X2000    IF(.NOT.TROLLF.OR.(PRSA.NE.HELLOW)) GO TO 10
  2350. X    CALL RSPEAK(366)
  2351. XC                        !TROLL OUT.
  2352. X    RETURN
  2353. XC
  2354. X10    TROLLP=.FALSE.
  2355. XC                        !COULDNT HANDLE IT.
  2356. X    RETURN
  2357. X    END
  2358. XC CYCLOP-    CYCLOPS FUNCTION
  2359. XC
  2360. XC DECLARATIONS
  2361. XC
  2362. X    LOGICAL FUNCTION CYCLOP(ARG)
  2363. X    IMPLICIT INTEGER (A-Z)
  2364. X#include "parser.h"
  2365. X#include "gamestate.h"
  2366. X#include "objects.h"
  2367. X#include "oflags.h"
  2368. X#include "oindex.h"
  2369. X#include "verbs.h"
  2370. X#include "flags.h"
  2371. XC CYCLOP, PAGE 2
  2372. XC
  2373. X    CYCLOP=.TRUE.
  2374. XC                        !ASSUME WINS.
  2375. X    IF(.NOT.CYCLOF) GO TO 100
  2376. XC                        !ASLEEP?
  2377. X    IF((PRSA.NE.ALARMW).AND.(PRSA.NE.MUNGW).AND.(PRSA.NE.HELLOW).AND.
  2378. X&        (PRSA.NE.BURNW).AND.(PRSA.NE.KILLW).AND.(PRSA.NE.ATTACW))
  2379. X&         GO TO 10
  2380. X    CYCLOF=.FALSE.
  2381. XC                        !WAKE CYCLOPS.
  2382. X    CALL RSPEAK(187)
  2383. XC                        !DESCRIBE.
  2384. X    RVCYC=IABS(RVCYC)
  2385. X    OFLAG2(CYCLO)=and(or(OFLAG2(CYCLO),FITEBT),not(SLEPBT))
  2386. X    RETURN
  2387. XC
  2388. X100    IF((PRSA.EQ.FIGHTW).OR.(PRSA.EQ.FRSTQW)) GO TO 10
  2389. X    IF(IABS(RVCYC).LE.5) GO TO 200
  2390. XC                        !ANNOYED TOO MUCH?
  2391. X    RVCYC=0
  2392. XC                        !RESTART COUNT.
  2393. X    CALL JIGSUP(188)
  2394. XC                        !YES, EATS PLAYER.
  2395. X    RETURN
  2396. XC
  2397. X200    IF(PRSA.NE.GIVEW) GO TO 500
  2398. XC                        !GIVE?
  2399. X    IF((PRSO.NE.FOOD).OR.(RVCYC.LT.0)) GO TO 300
  2400. XC                        !FOOD WHEN HUNGRY?
  2401. X    CALL NEWSTA(FOOD,189,0,0,0)
  2402. XC                        !EATS PEPPERS.
  2403. X    RVCYC=MIN0(-1,-RVCYC)
  2404. XC                        !GETS THIRSTY.
  2405. X    RETURN
  2406. XC
  2407. X300    IF(PRSO.NE.WATER) GO TO 400
  2408. XC                        !DRINK WHEN THIRSTY?
  2409. X    IF(RVCYC.GE.0) GO TO 350
  2410. X    CALL NEWSTA(PRSO,190,0,0,0)
  2411. XC                        !DRINKS AND
  2412. X    CYCLOF=.TRUE.
  2413. XC                        !FALLS ASLEEP.
  2414. X    OFLAG2(CYCLO)=and(or(OFLAG2(CYCLO),SLEPBT),not(FITEBT))
  2415. X    RETURN
  2416. XC
  2417. X350    CALL RSPEAK(191)
  2418. XC                        !NOT THIRSTY.
  2419. X10    CYCLOP=.FALSE.
  2420. XC                        !FAILS.
  2421. X    RETURN
  2422. XC
  2423. X400    I=192
  2424. XC                        !ASSUME INEDIBLE.
  2425. X    IF(PRSO.EQ.GARLI) I=193
  2426. XC                        !GARLIC IS JOKE.
  2427. X450    CALL RSPEAK(I)
  2428. XC                        !DISDAIN IT.
  2429. X    IF(RVCYC.LT.0) RVCYC=RVCYC-1
  2430. X    IF(RVCYC.GE.0) RVCYC=RVCYC+1
  2431. X    IF(.NOT.CYCLOF) CALL RSPEAK(193+IABS(RVCYC))
  2432. X    RETURN
  2433. XC
  2434. X500    I=0
  2435. XC                        !ASSUME NOT HANDLED.
  2436. X    IF(PRSA.EQ.HELLOW) GO TO 450
  2437. XC                        !HELLO IS NO GO.
  2438. X    IF((PRSA.EQ.THROWW).OR.(PRSA.EQ.MUNGW)) I=200+RND(2)
  2439. X    IF(PRSA.EQ.TAKEW) I=202
  2440. X    IF(PRSA.EQ.TIEW) I=203
  2441. X    IF(I) 10,10,450
  2442. XC                        !SEE IF HANDLED.
  2443. XC
  2444. X    END
  2445. XC THIEFP-    THIEF FUNCTION
  2446. XC
  2447. XC DECLARATIONS
  2448. XC
  2449. X    LOGICAL FUNCTION THIEFP(ARG)
  2450. X    IMPLICIT INTEGER (A-Z)
  2451. X    LOGICAL QHERE,PROB
  2452. X#include "parser.h"
  2453. X#include "gamestate.h"
  2454. XC
  2455. XC ROOMS
  2456. X#include "rindex.h"
  2457. X#include "objects.h"
  2458. X#include "oflags.h"
  2459. X#include "oindex.h"
  2460. X#include "clock.h"
  2461. X
  2462. X#include "villians.h"
  2463. X#include "verbs.h"
  2464. X#include "flags.h"
  2465. XC THIEFP, PAGE 2
  2466. XC
  2467. X    THIEFP=.TRUE.
  2468. XC                        !ASSUME WINS.
  2469. X    IF(PRSA.NE.FIGHTW) GO TO 100
  2470. XC                        !FIGHT?
  2471. X    IF(OCAN(STILL).EQ.THIEF) GO TO 10
  2472. XC                        !GOT STILLETTO?  F.
  2473. X    IF(QHERE(STILL,THFPOS)) GO TO 50
  2474. XC                        !CAN HE RECOVER IT?
  2475. X    CALL NEWSTA(THIEF,0,0,0,0)
  2476. XC                        !NO, VANISH.
  2477. X    IF(QHERE(THIEF,HERE)) CALL RSPEAK(498)
  2478. XC                        !IF HERO, TELL.
  2479. X    RETURN
  2480. XC
  2481. X50    CALL NEWSTA(STILL,0,0,THIEF,0)
  2482. XC                        !YES, RECOVER.
  2483. X    IF(QHERE(THIEF,HERE)) CALL RSPEAK(499)
  2484. XC                        !IF HERO, TELL.
  2485. X    RETURN
  2486. XC
  2487. X100    IF(PRSA.NE.DEADXW) GO TO 200
  2488. XC                        !DEAD?
  2489. X    THFACT=.FALSE.
  2490. XC                        !DISABLE DEMON.
  2491. X    OFLAG1(CHALI)=or(OFLAG1(CHALI),TAKEBT)
  2492. X    J=0
  2493. X    DO 125 I=1,OLNT
  2494. XC                        !CARRYING ANYTHING?
  2495. X125      IF(OADV(I).EQ.-THIEF) J=500
  2496. X    CALL RSPEAK(J)
  2497. XC                        !TELL IF BOOTY REAPPEARS.
  2498. XC
  2499. X    J=501
  2500. X    DO 150 I=1,OLNT
  2501. XC                        !LOOP.
  2502. X      IF((I.EQ.CHALI).OR.(I.EQ.THIEF).OR.(HERE.NE.TREAS)
  2503. X&        .OR. .NOT.QHERE(I,HERE)) GO TO 135
  2504. X      OFLAG1(I)=or(OFLAG1(I),VISIBT)
  2505. X      CALL RSPSUB(J,ODESC2(I))
  2506. XC                        !DESCRIBE.
  2507. X      J=502
  2508. X      GO TO 150
  2509. XC
  2510. X135      IF(OADV(I).EQ.-THIEF) CALL NEWSTA(I,0,HERE,0,0)
  2511. X150    CONTINUE
  2512. X    RETURN
  2513. XC
  2514. X200    IF(PRSA.NE.FRSTQW) GO TO 250
  2515. XC                        !FIRST ENCOUNTER?
  2516. X    THIEFP=PROB(20,75)
  2517. X    RETURN
  2518. XC
  2519. X250    IF((PRSA.NE.HELLOW).OR.(ODESC1(THIEF).NE.504))
  2520. X&        GO TO 300
  2521. X    CALL RSPEAK(626)
  2522. X    RETURN
  2523. XC
  2524. X300    IF(PRSA.NE.OUTXW) GO TO 400
  2525. XC                        !OUT?
  2526. X    THFACT=.FALSE.
  2527. XC                        !DISABLE DEMON.
  2528. X    ODESC1(THIEF)=504
  2529. XC                        !CHANGE DESCRIPTION.
  2530. X    OFLAG1(STILL)=and(OFLAG1(STILL),not(VISIBT))
  2531. X    OFLAG1(CHALI)=or(OFLAG1(CHALI),TAKEBT)
  2532. X    RETURN
  2533. XC
  2534. X400    IF(PRSA.NE.INXW) GO TO 500
  2535. XC                        !IN?
  2536. X    IF(QHERE(THIEF,HERE)) CALL RSPEAK(505)
  2537. XC                        !CAN HERO SEE?
  2538. X    THFACT=.TRUE.
  2539. XC                        !ENABLE DEMON.
  2540. X    ODESC1(THIEF)=503
  2541. XC                        !CHANGE DESCRIPTION.
  2542. X    OFLAG1(STILL)=or(OFLAG1(STILL),VISIBT)
  2543. X    IF((HERE.EQ.TREAS).AND.QHERE(CHALI,HERE))
  2544. X&        OFLAG1(CHALI)=and(OFLAG1(CHALI),not(TAKEBT))
  2545. X    RETURN
  2546. XC
  2547. X500    IF(PRSA.NE.TAKEW) GO TO 600
  2548. XC                        !TAKE?
  2549. X    CALL RSPEAK(506)
  2550. XC                        !JOKE.
  2551. X    RETURN
  2552. XC
  2553. X600    IF((PRSA.NE.THROWW).OR.(PRSO.NE.KNIFE).OR.
  2554. X&        (and(OFLAG2(THIEF),FITEBT).NE.0)) GO TO 700
  2555. X    IF(PROB(10)) GO TO 650
  2556. XC                        !THREW KNIFE, 10%?
  2557. X    CALL RSPEAK(507)
  2558. XC                        !NO, JUST MAKES
  2559. X    OFLAG2(THIEF)=or(OFLAG2(THIEF),FITEBT)
  2560. X    RETURN
  2561. XC
  2562. X650    J=508
  2563. XC                        !THIEF DROPS STUFF.
  2564. X    DO 675 I=1,OLNT
  2565. X      IF(OADV(I).NE.-THIEF) GO TO 675
  2566. XC                        !THIEF CARRYING?
  2567. X      J=509
  2568. X      CALL NEWSTA(I,0,HERE,0,0)
  2569. X675    CONTINUE
  2570. X    CALL NEWSTA(THIEF,J,0,0,0)
  2571. XC                        !THIEF VANISHES.
  2572. X    RETURN
  2573. XC
  2574. X700    IF(((PRSA.NE.THROWW).AND.(PRSA.NE.GIVEW)).OR.(PRSO.EQ.0).OR.
  2575. X&        (PRSO.EQ.THIEF)) GO TO 10
  2576. X    IF(OCAPAC(THIEF).GE.0) GO TO 750
  2577. XC                        !WAKE HIM UP.
  2578. X    OCAPAC(THIEF)=-OCAPAC(THIEF)
  2579. X    THFACT=.TRUE.
  2580. X    OFLAG1(STILL)=or(OFLAG1(STILL),VISIBT)
  2581. X    ODESC1(THIEF)=503
  2582. X    CALL RSPEAK(510)
  2583. XC
  2584. X750    IF((PRSO.NE.BRICK).OR.(OCAN(FUSE).NE.BRICK).OR.
  2585. X&        (CTICK(CEVFUS).EQ.0)) GO TO 800
  2586. X    CALL RSPEAK(511)
  2587. XC                        !THIEF REFUSES BOMB.
  2588. X    RETURN
  2589. XC
  2590. X800    CALL NEWSTA(PRSO,0,0,0,-THIEF)
  2591. XC                        !THIEF TAKES GIFT.
  2592. X    IF(OTVAL(PRSO).GT.0) GO TO 900
  2593. XC                        !A TREASURE?
  2594. X    CALL RSPSUB(512,ODESC2(PRSO))
  2595. X    RETURN
  2596. XC
  2597. X900    CALL RSPSUB(627,ODESC2(PRSO))
  2598. XC                        !THIEF ENGROSSED.
  2599. X    THFENF=.TRUE.
  2600. X    RETURN
  2601. XC
  2602. X10    THIEFP=.FALSE.
  2603. X    RETURN
  2604. X    END
  2605. END_OF_villns.F
  2606. if test 7657 -ne `wc -c <villns.F`; then
  2607.     echo shar: \"villns.F\" unpacked with wrong size!
  2608. fi
  2609. # end of overwriting check
  2610. fi
  2611. echo shar: End of archive 3 \(of 7\).
  2612. cp /dev/null ark3isdone
  2613. MISSING=""
  2614. for I in 1 2 3 4 5 6 7 ; do
  2615.     if test ! -f ark${I}isdone ; then
  2616.     MISSING="${MISSING} ${I}"
  2617.     fi
  2618. done
  2619. if test "${MISSING}" = "" ; then
  2620.     echo You have unpacked all 7 archives.
  2621.     rm -f ark[1-9]isdone
  2622. else
  2623.     echo You still need to unpack the following archives:
  2624.     echo "        " ${MISSING}
  2625. fi
  2626. ##  End of shell archive.
  2627. exit 0
  2628.